Browse Source

房屋导入暂提

dev
zxc 4 years ago
parent
commit
c554be8b0b
  1. 44
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 8
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  3. 49
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  4. 41
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModelDTO.java
  5. 128
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  6. 94
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
  7. 40
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml

44
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -640,4 +640,48 @@ public class RedisKeys {
public static String getHouseInfoCacheKey(String houseId,String customerId){
return rootPrefix.concat("house:").concat(customerId).concat(":").concat(houseId);
}
/**
* @Description 临时房屋缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:38 上午
*/
public static String getTemporaryHouseInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryHouse:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时网格缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:38 上午
*/
public static String getTemporaryGridInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryGrid:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时小区缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:39 上午
*/
public static String getTemporaryNeighborHoodInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryNeighborHood:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时楼栋缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:39 上午
*/
public static String getTemporaryBuildingInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryBuilding:").concat(customerId).concat(":").concat(userId);
}
}

8
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java

@ -31,6 +31,7 @@ import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.form.*;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
@ -40,6 +41,7 @@ import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.HouseService;
import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j;
@ -72,6 +74,10 @@ public class HouseController implements ResultDataResolver {
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Autowired
private IcBuildingDao icBuildingDao;
@Autowired
private IcHouseRedis icHouseRedis;
@PostMapping("houselist")
@ -256,7 +262,7 @@ public class HouseController implements ResultDataResolver {
excelReader = EasyExcel.read(inputStream).build();
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
ReadSheet readSheet = EasyExcel.readSheet(0).head(HouseInfoModel.class)
.registerReadListener(new ImportHouseInfoListener(formDTO))
.registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis))
.build();
excelReader.read(readSheet);
} finally {

49
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java

@ -19,6 +19,7 @@ package com.epmet.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.result.BaseInfoFamilyBuildingResultDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.entity.CustomerAgencyEntity;
@ -73,4 +74,52 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
List<BuildingResultDTO> buildingListByIds(@Param("buildingIdList") List<String> buildingIdList);
IPage<BuildingResultDTO> buildingListByIds(IPage<IcBuildingEntity> page,@Param("buildingIdList") List<String> buildingIdList);
/**
* @Description 根据ID查询楼栋名
* @param orgId
* @author zxc
* @date 2022/2/13 2:32 下午
*/
String selectBuildingNameById(@Param("orgId")String orgId);
/**
* @Description 根据ID查询小区名
* @param orgId
* @author zxc
* @date 2022/2/13 4:21 下午
*/
String selectNeighborHoodNameById(@Param("orgId")String orgId);
/**
* @Description 根据ID查询网格名
* @param orgId
* @author zxc
* @date 2022/2/13 4:26 下午
*/
String selectGridNameById(@Param("orgId")String orgId);
/**
* @Description 根据ID查询组织名
* @param orgId
* @author zxc
* @date 2022/2/13 4:29 下午
*/
String selectAgencyNameById(@Param("orgId")String orgId);
/**
* @Description 查询组织下所有网格信息
* @param orgId
* @author zxc
* @date 2022/2/14 9:48 上午
*/
List<ImportHouseGeneralDTO> selectAllGridByOrgId(@Param("orgId")String orgId);
/**
* @Description 查询网格下所有的小区
* @param orgId
* @author zxc
* @date 2022/2/14 10:21 上午
*/
List<ImportHouseGeneralDTO> selectAllNeighborHoodByGridIds(@Param("orgIds")List<String> orgId);
}

41
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModelDTO.java

@ -0,0 +1,41 @@
package com.epmet.model;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @Author zxc
* @DateTime 2022/2/13 1:26 下午
* @DESC
*/
@Data
public class HouseInfoModelDTO {
private String agencyName;
private String gridName;
private String neighborHoodName;
private String buildingName;
private Integer buildingUnit;
private String doorName;
private String houseType;
private String purpose;
private String rentFlag;
private String ownerName;
private String ownerPhone;
private String ownerIdCard;
private Integer num;
}

128
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java

@ -2,7 +2,21 @@ package com.epmet.model;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.redis.IcHouseRedis;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author zxc
@ -11,23 +25,133 @@ import com.epmet.dto.form.ImportInfoFormDTO;
*/
public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoModel> {
List<Integer> nums = new ArrayList<>();
List<ImportHouseGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportHouseGeneralDTO> needInsertList = new ArrayList<>();
Integer num = NumConstant.ZERO;
String buildingName = null;
String neighborHoodName = null;
String gridName = null;
String agencyName = null;
Map<String, Object> gridInfos = null;
List<ImportHouseGeneralDTO> gridInfoDTOs = null;
Map<String, Object> neighborHoodInfos = null;
List<ImportHouseGeneralDTO> neighborHoodInfoDTOs = null;
private ImportInfoFormDTO formDTO;
private IcBuildingDao icBuildingDao;
private IcHouseRedis icHouseRedis;
public ImportHouseInfoListener(ImportInfoFormDTO formDTO){
public ImportHouseInfoListener(ImportInfoFormDTO formDTO,IcBuildingDao icBuildingDao, IcHouseRedis icHouseRedis){
this.formDTO = formDTO;
this.icBuildingDao = icBuildingDao;
this.icHouseRedis = icHouseRedis;
}
@Override
public void invoke(HouseInfoModel data, AnalysisContext context) {
System.out.println("aaa");
if (null == data){
return;
}
ImportHouseGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportHouseGeneralDTO.class);
num = num + NumConstant.ONE;
if (formDTO.getOrgType().equals("building")){
buildingName = null == buildingName ? icBuildingDao.selectBuildingNameById(formDTO.getOrgId()) : buildingName;
// 不是本楼的
if (!data.getBuildingName().equals(buildingName)){
nums.add(num);
}else {
/**
* 1根据楼宇查询
*/
needDisposeList.add(dto);
Map<String, Object> collect = needDisposeList.stream().collect(Collectors.toMap(n -> n.getBuildingId() + "_" + n.getBuildingUnitId() + "_" + n.getDoorName(), n -> StringUtils.isNotBlank(n.getHouseId()) ? n.getHouseId() : ""));
icHouseRedis.setTemporaryCacheHouse(formDTO.getCustomerId(), collect, formDTO.getUserId());
// Map<String, Object> temporaryCacheHouses = icHouseRedis.getTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
// TODO 等待方法
List<ImportHouseGeneralDTO> result = new ArrayList<>();
//把房屋ID不为空的行号加入nums,说明已存在
result.forEach(r -> {
if (StringUtils.isNotBlank(r.getHouseId())){
nums.add(r.getNum());
}
});
}
}else if (formDTO.getOrgType().equals("neighborHood")){
neighborHoodName = null == neighborHoodName ? icBuildingDao.selectNeighborHoodNameById(formDTO.getOrgId()) : neighborHoodName;
//不是本小区的
if (!data.getNeighborHoodName().equals(neighborHoodName)){
nums.add(num);
}else {
}
}else if (formDTO.getOrgType().equals("grid")){
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
//不是本网格的
if (!data.getGridName().equals(gridName)){
nums.add(num);
}else {
//
}
}else if (formDTO.getOrgType().equals("agency")){
agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
//不是本组织的
if (!data.getAgencyName().equals(agencyName)){
nums.add(num);
}else {
// 根据组织查询出所有网格,甩出不是本组织下的网格
gridInfos = null == gridInfos ? getGridInfos(formDTO.getOrgId()) : gridInfos;
if (null == gridInfos){
// 组织下确实不存在网格
return;
}
// 根据网格名对比,没有找到的就把行号加入到未执行成功队列中
Object cacheGridName = icHouseRedis.getTemporaryCacheGrid(formDTO.getCustomerId(), formDTO.getUserId(), dto.getGridName());
if (null == cacheGridName){
nums.add(num);
return;
}
dto.setGridId(cacheGridName.toString());
dto.setAgencyId(formDTO.getOrgId());
needDisposeList.add(dto);
}
}
}
/**
* @Description 获取网格信息
* @param orgId
* @author zxc
* @date 2022/2/14 9:57 上午
*/
public Map<String,Object> getGridInfos(String orgId){
gridInfoDTOs = icBuildingDao.selectAllGridByOrgId(orgId);
gridInfos = gridInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridName(), n -> n.getGridId()));
icHouseRedis.setTemporaryCacheGrid(formDTO.getCustomerId(), gridInfos, formDTO.getUserId());
return gridInfos;
}
/**
* @Description 获取网格下的小区
* @param gridIds
* @author zxc
* @date 2022/2/14 10:16 上午
*/
public Map<String,Object> getNeighborHoodInfos(List<String> gridIds){
neighborHoodInfoDTOs = icBuildingDao.selectAllNeighborHoodByGridIds(gridIds);
neighborHoodInfos = neighborHoodInfoDTOs.stream().collect(Collectors.toMap(n -> n.getGridId() + "_" + n.getNeighborHoodName(), n -> n.getNeighborHoodId()));
icHouseRedis.setTemporaryCacheNeighBorHood(formDTO.getCustomerId(), neighborHoodInfos, formDTO.getUserId());
return neighborHoodInfos;
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
}
}

94
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java

@ -18,15 +18,23 @@
package com.epmet.redis;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IcHouseDao;
import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.HouseInfoModelDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -43,6 +51,9 @@ public class IcHouseRedis {
@Autowired
private IcHouseDao icHouseDao;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void delete(Object[] ids) {
}
@ -79,4 +90,87 @@ public class IcHouseRedis {
return houseInfo;
}
/**
* @Description 存放房屋临时缓存
* @param customerId
* @param map
* @param userId
* @author zxc
* @date 2022/2/14 9:04 上午
*/
public void setTemporaryCacheHouse(String customerId, Map<String,Object> map,String userId){
String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
redisUtils.hMSet(key,map,RedisUtils.NOT_EXPIRE);
}
/**
* @Description 获取房屋临时缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:28 上午
*/
public Object getTemporaryCacheHouse(String customerId,String userId,String buildingIdAndUnitIdAndHouseName){
String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, buildingIdAndUnitIdAndHouseName);
}
/**
* @Description 删除房屋临时缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:29 上午
*/
public void delTemporaryCacheHouses(String customerId,String userId){
String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
public void setTemporaryCacheGrid(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map, RedisUtils.NOT_EXPIRE);
}
public Object getTemporaryCacheGrid(String customerId,String userId,String gridName){
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
Object o = redisUtils.hGet(key, gridName);
return o;
}
public Map<String,Object> getTemporaryCacheGrids(String customerId,String userId){
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
return redisUtils.hGetAll(key);
}
public void delTemporaryCacheGrids(String customerId,String userId){
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
public void setTemporaryCacheNeighBorHood(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map, RedisUtils.NOT_EXPIRE);
}
public Object getTemporaryCacheNeighBorHood(String customerId,String userId,String gridIdAndNeighborHoodName){
String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, gridIdAndNeighborHoodName);
}
public void delTemporaryCacheNeighBorHood(String customerId,String userId){
String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
public void setTemporaryCacheBuilding(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map, RedisUtils.NOT_EXPIRE);
}
public Object getTemporaryCacheBuilding(String customerId,String userId,String neighborHoodIdAndBuildingName){
String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, neighborHoodIdAndBuildingName);
}
public void delTemporaryCacheBuilding(String customerId,String userId){
String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
}

40
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml

@ -221,4 +221,44 @@
order by gridName,neighborHoodName,buildingName
</select>
<!-- 根据ID查询楼栋名 -->
<select id="selectBuildingNameById" resultType="java.lang.String">
SELECT BUILDING_NAME FROM ic_building WHERE DEL_FLAG = '0' AND ID = #{orgId}
</select>
<!-- 根据ID查询小区名 -->
<select id="selectNeighborHoodNameById" resultType="java.lang.String">
SELECT NEIGHBOR_HOOD_NAME FROM ic_neighbor_hood WHERE del_flag = '0' AND id = #{orgId}
</select>
<!-- 根据ID查询网格名 -->
<select id="selectGridNameById" resultType="java.lang.String">
SELECT grid_name FROM customer_grid WHERE DEL_FLAG = '0' AND ID = #{orgId}
</select>
<!-- 根据ID查询组织名 -->
<select id="selectAgencyNameById" resultType="java.lang.String">
SELECT ORGANIZATION_NAME FROM customer_agency WHERE DEL_FLAG = '0' AND ID = #{orgId}
</select>
<!-- 查询组织下所有网格信息 -->
<select id="selectAllGridByOrgId" resultType="com.epmet.dto.ImportHouseGeneralDTO">
SELECT ID AS gridId,GRID_NAME FROM customer_grid WHERE DEL_FLAG = '0' AND PID = #{orgId}
</select>
<!-- 查询网格下所有的小区 -->
<select id="selectAllNeighborHoodByGridIds" resultType="com.epmet.dto.ImportHouseGeneralDTO">
SELECT
ID AS neighborHoodId,
NEIGHBOR_HOOD_NAME,
GRID_ID
FROM ic_neighbor_hood
WHERE DEL_FLAG = '0'
AND GRID_ID IN (
<foreach collection="orgIds" item="o" separator=",">
#{o}
</foreach>
)
</select>
</mapper>

Loading…
Cancel
Save