Browse Source

Merge branch 'dev_addcate_and_import' into develop

# Conflicts:
#	epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
master
zxc 4 years ago
parent
commit
1c803ebc4f
  1. 5
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 9
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportHouseGeneralDTO.java
  3. 31
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java
  4. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
  5. 23
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  6. 24
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  7. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java
  8. 246
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  9. 16
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
  10. 11
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
  11. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java
  12. 12
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
  13. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
  14. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java
  15. 152
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
  16. 2
      epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.11__edit_neighbor_hood.sql
  17. 43
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml

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

@ -728,4 +728,9 @@ public class RedisKeys {
public static String icResiImportResiCategoryKey(String importTag, String type, String resiId) { public static String icResiImportResiCategoryKey(String importTag, String type, String resiId) {
return icResiImportTypeKey(importTag, type).concat(":").concat(resiId); return icResiImportTypeKey(importTag, type).concat(":").concat(resiId);
} }
public static String getTemporaryImportResultCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryResult:").concat(customerId).concat(":").concat(userId);
}
} }

9
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportHouseGeneralDTO.java

@ -89,7 +89,8 @@ public class ImportHouseGeneralDTO implements Serializable {
/** /**
* 是否出租 * 是否出租
*/ */
private String rentFlag; private String rentFlagString;
private Integer rentFlag;
/** /**
* 姓名 * 姓名
@ -115,4 +116,10 @@ public class ImportHouseGeneralDTO implements Serializable {
* 房屋ID * 房屋ID
*/ */
private String houseId; private String houseId;
private String houseName;
private String customerId;
private Boolean existStatus = false;
} }

31
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java

@ -0,0 +1,31 @@
package com.epmet.dto.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @Author zxc
* @DateTime 2022/2/15 9:25 上午
* @DESC
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ImportResultDTO implements Serializable {
private static final long serialVersionUID = -5817164530837181890L;
/**
* 未导入的行号
*/
private List<Integer> nums;
/**
* 总条数
*/
private Integer num;
}

1
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java

@ -18,4 +18,5 @@ public interface CustomerGridConstant {
String GRID = "grid"; String GRID = "grid";
String NEIGHBORHOOD = "neighborHood"; String NEIGHBORHOOD = "neighborHood";
String BUILDING = "building";
} }

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

@ -35,6 +35,7 @@ import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.form.*; import com.epmet.dto.form.*;
import com.epmet.dto.result.HouseInfoDTO; import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO; import com.epmet.dto.result.IcNeighborHoodResultDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.dto.result.LoginUserDetailsResultDTO; import com.epmet.dto.result.LoginUserDetailsResultDTO;
import com.epmet.excel.IcHouseExcel; import com.epmet.excel.IcHouseExcel;
import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient;
@ -43,6 +44,8 @@ import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener; import com.epmet.model.ImportHouseInfoListener;
import com.epmet.redis.IcHouseRedis; import com.epmet.redis.IcHouseRedis;
import com.epmet.service.HouseService; import com.epmet.service.HouseService;
import com.epmet.service.IcHouseService;
import com.epmet.service.IcNeighborHoodService;
import com.epmet.util.ExcelPoiUtils; import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -78,6 +81,10 @@ public class HouseController implements ResultDataResolver {
private IcBuildingDao icBuildingDao; private IcBuildingDao icBuildingDao;
@Autowired @Autowired
private IcHouseRedis icHouseRedis; private IcHouseRedis icHouseRedis;
@Autowired
private IcNeighborHoodService neighborHoodService;
@Autowired
private IcHouseService icHouseService;
@PostMapping("houselist") @PostMapping("houselist")
@ -262,7 +269,7 @@ public class HouseController implements ResultDataResolver {
excelReader = EasyExcel.read(inputStream).build(); excelReader = EasyExcel.read(inputStream).build();
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
ReadSheet readSheet = EasyExcel.readSheet(0).head(HouseInfoModel.class) ReadSheet readSheet = EasyExcel.readSheet(0).head(HouseInfoModel.class)
.registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis)) .registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis,neighborHoodService,icHouseService))
.build(); .build();
excelReader.read(readSheet); excelReader.read(readSheet);
} finally { } finally {
@ -270,7 +277,19 @@ public class HouseController implements ResultDataResolver {
excelReader.finish(); excelReader.finish();
} }
} }
return new Result<>(); ImportResultDTO dto = icHouseRedis.getImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId());
if (null == dto){
return new Result<>();
}
List<Integer> nums = dto.getNums();
Integer num = dto.getNum();
String s = "共%s条数据,导入成功%s条。";
if (nums.size() > NumConstant.ZERO){
Collections.sort(nums);
s = s + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"条导入失败";
return new Result<>().error(9999,String.format(s,num,num - nums.size()));
}
return new Result<>().ok(String.format(s,num,num));
} }
} }

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

@ -138,4 +138,28 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
*/ */
List<ImportHouseGeneralDTO> selectAllBuildingUnitByBuildingId(@Param("building")String building); List<ImportHouseGeneralDTO> selectAllBuildingUnitByBuildingId(@Param("building")String building);
/**
* @Description 根据ID查询小区
* @param id
* @author zxc
* @date 2022/2/14 3:16 下午
*/
ImportHouseGeneralDTO selectNeighborHoodById(@Param("id")String id);
/**
* @Description 根据ID查询楼栋
* @param id
* @author zxc
* @date 2022/2/14 4:26 下午
*/
ImportHouseGeneralDTO selectBuildingById(@Param("id")String id);
/**
* @Description 查询已存在的房屋
* @param ids
* @author zxc
* @date 2022/2/14 5:32 下午
*/
List<String> selectExistHouse(@Param("ids")List<String> ids);
} }

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java

@ -38,7 +38,7 @@ public class HouseInfoModel {
private String purpose; private String purpose;
@ExcelProperty(value = "出租") @ExcelProperty(value = "出租")
private String rentFlag; private String rentFlagString;
@ExcelProperty(value = "房主姓名") @ExcelProperty(value = "房主姓名")
private String ownerName; private String ownerName;

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

@ -6,13 +6,26 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis; import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.constant.CustomerAgencyConstant;
import com.epmet.constant.CustomerGridConstant;
import com.epmet.dao.IcBuildingDao; import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.ImportHouseGeneralDTO; import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO; import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.entity.IcHouseEntity;
import com.epmet.enums.HousePurposeEnums;
import com.epmet.enums.HouseRentFlagEnums;
import com.epmet.enums.HouseTypeEnums;
import com.epmet.excel.IcNeighborHoodExcel;
import com.epmet.redis.IcHouseRedis; import com.epmet.redis.IcHouseRedis;
import com.epmet.service.HouseService;
import com.epmet.service.IcHouseService;
import com.epmet.service.IcNeighborHoodService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.*; import java.util.*;
@ -31,8 +44,6 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
List<ImportHouseGeneralDTO> needDisposeList = new ArrayList<>(); List<ImportHouseGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportHouseGeneralDTO> needInsertList = new ArrayList<>(); List<ImportHouseGeneralDTO> needInsertList = new ArrayList<>();
String buildingName = null;
String neighborHoodName = null;
String gridName = null; String gridName = null;
String agencyName = null; String agencyName = null;
@ -40,19 +51,25 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
List<ImportHouseGeneralDTO> gridInfoDTOs = null; List<ImportHouseGeneralDTO> gridInfoDTOs = null;
Map<String, Object> neighborHoodInfos = null; Map<String, Object> neighborHoodInfos = null;
List<ImportHouseGeneralDTO> neighborHoodInfoDTOs = null; List<ImportHouseGeneralDTO> neighborHoodInfoDTOs = null;
ImportHouseGeneralDTO neighborHoodGeneralDTO = null;
Map<String, Object> buildingInfos = null; Map<String, Object> buildingInfos = null;
List<ImportHouseGeneralDTO> buildingInfoDTOs = null; List<ImportHouseGeneralDTO> buildingInfoDTOs = null;
ImportHouseGeneralDTO buildingGeneralDTO = null;
Map<String, Object> buildingUnitInfos = null; Map<String, Object> buildingUnitInfos = null;
List<ImportHouseGeneralDTO> buildingUnitInfoDTOs = null; List<ImportHouseGeneralDTO> buildingUnitInfoDTOs = null;
private ImportInfoFormDTO formDTO; private ImportInfoFormDTO formDTO;
private IcBuildingDao icBuildingDao; private IcBuildingDao icBuildingDao;
private IcHouseRedis icHouseRedis; private IcHouseRedis icHouseRedis;
private IcNeighborHoodService neighborHoodService;
private IcHouseService icHouseService;
public ImportHouseInfoListener(ImportInfoFormDTO formDTO,IcBuildingDao icBuildingDao, IcHouseRedis icHouseRedis){ public ImportHouseInfoListener(ImportInfoFormDTO formDTO,IcBuildingDao icBuildingDao, IcHouseRedis icHouseRedis,IcNeighborHoodService neighborHoodService, IcHouseService icHouseService){
this.formDTO = formDTO; this.formDTO = formDTO;
this.icBuildingDao = icBuildingDao; this.icBuildingDao = icBuildingDao;
this.icHouseRedis = icHouseRedis; this.icHouseRedis = icHouseRedis;
this.neighborHoodService = neighborHoodService;
this.icHouseService = icHouseService;
} }
@Override @Override
@ -63,44 +80,157 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
num = num + NumConstant.ONE; num = num + NumConstant.ONE;
ImportHouseGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportHouseGeneralDTO.class); ImportHouseGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportHouseGeneralDTO.class);
dto.setNum(num); dto.setNum(num);
if (formDTO.getOrgType().equals("building")){ dto.setCustomerId(formDTO.getCustomerId());
buildingName = null == buildingName ? icBuildingDao.selectBuildingNameById(formDTO.getOrgId()) : buildingName; dto.setHouseType(HouseTypeEnums.getKeyByValue(dto.getHouseType()));
// 不是本楼的 dto.setPurpose(HousePurposeEnums.getKeyByValue(dto.getPurpose()));
if (!data.getBuildingName().equals(buildingName)){ dto.setRentFlag(HouseRentFlagEnums.getCodeByName(dto.getRentFlagString()));
dto.setHouseName(dto.getBuildingName()+"-"+dto.getBuildingUnit()+"-"+dto.getDoorName());
if (formDTO.getOrgType().equals(CustomerGridConstant.BUILDING)){
disposeBuildingHouse(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.NEIGHBORHOOD)){
disposeNeighborHoodHouse(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
disposeGridHouse(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
disposeAgencyHouse(dto);
}
// 数据筛选完毕,当num每满100条,处理一次
if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
finalDispose();
}
}
public void finalDispose(){
List<ImportHouseGeneralDTO> importInfo = neighborHoodService.getImportInfo(formDTO, needDisposeList);
needInsertList.addAll(importInfo);
Map<String, Long> collect = needInsertList.stream().collect(Collectors.groupingBy(n -> n.getBuildingUnitId() + "_" + n.getDoorName(), Collectors.counting()));
collect.forEach((k,v) -> {
if (Integer.valueOf(v.toString()).compareTo(1) > 0){
for (ImportHouseGeneralDTO r : needInsertList) {
if (k.equals(r.getBuildingUnitId()+"_"+r.getDoorName())){
// 集合里重复的
r.setExistStatus(true);
nums.add(r.getNum());
}
}
}
});
// 根据单元ID_doorName查询已存在的
List<String> ids = needInsertList.stream().map(m -> m.getBuildingUnitId() + "_" + m.getDoorName()).distinct().collect(Collectors.toList());
List<String> existHouses = icBuildingDao.selectExistHouse(ids);
existHouses.forEach(e -> {
for (ImportHouseGeneralDTO n : needInsertList) {
if ((n.getBuildingUnitId()+"_"+n.getDoorName()).equals(e)){
// 库里存在的
n.setExistStatus(true);
nums.add(n.getNum());
}
}
});
// 根据存在状态分组
Map<Boolean, List<ImportHouseGeneralDTO>> groupByExistStatus = needInsertList.stream().collect(Collectors.groupingBy(ImportHouseGeneralDTO::getExistStatus));
List<ImportHouseGeneralDTO> importHouseGeneralDTOS = groupByExistStatus.get(false);
houseInsert(importHouseGeneralDTOS);
// 清除
needDisposeList = new ArrayList<>();
needInsertList = new ArrayList<>();
gridName = null;
agencyName = null;
gridInfos = null;
gridInfoDTOs = null;
neighborHoodInfos = null;
neighborHoodInfoDTOs = null;
neighborHoodGeneralDTO = null;
buildingInfos = null;
buildingInfoDTOs = null;
buildingGeneralDTO = null;
buildingUnitInfos = null;
buildingUnitInfoDTOs = null;
}
/**
* @Description 左侧树点击楼栋时调用
* @param dto
* @author zxc
* @date 2022/2/14 3:23 下午
*/
public void disposeBuildingHouse(ImportHouseGeneralDTO dto){
buildingGeneralDTO = null == buildingGeneralDTO ? icBuildingDao.selectBuildingById(formDTO.getOrgId()) : buildingGeneralDTO;
// 排除不是本楼的
if (!dto.getBuildingName().equals(buildingGeneralDTO.getBuildingName())){
nums.add(num);
}else {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(buildingGeneralDTO.getGridId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
}
// 排除 1、小区名不一样&&楼栋名一样 2、网格名不一样&&小区名一样&&楼名一样 3、组织名不一样&&网格名一样&&小区名一样&&楼名一样
if ((!buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))
|| (!gridInfo.getGridName().equals(dto.getGridName())&&buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))
|| (!gridInfo.getAgencyName().equals(dto.getAgencyName())&&gridInfo.getGridName().equals(dto.getGridName())&&buildingGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()) && buildingGeneralDTO.getBuildingName().equals(dto.getBuildingName()))){
nums.add(num); nums.add(num);
return;
}
dto.setBuildingId(formDTO.getOrgId());
dto.setNeighborHoodId(buildingGeneralDTO.getNeighborHoodId());
dto.setGridId(buildingGeneralDTO.getGridId());
dto.setAgencyId(buildingGeneralDTO.getAgencyId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
dto.setType(buildingGeneralDTO.getType());
dto.setTotalHouseNum(buildingGeneralDTO.getTotalHouseNum());
dto.setTotalFloorNum(buildingGeneralDTO.getTotalFloorNum());
dto.setTotalUnitNum(buildingGeneralDTO.getTotalUnitNum());
// 补充单元ID
buildingUnitInfos = null == buildingUnitInfos ? getBuildingUnitInfos(dto.getBuildingId()) : buildingUnitInfos;
Object cacheBuildingUnit = icHouseRedis.getTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId(), dto.getBuildingId() + "_" + dto.getBuildingUnit());
dto.setBuildingUnitId(null == cacheBuildingUnit ? "" : cacheBuildingUnit.toString());
if (StringUtils.isNotBlank(dto.getBuildingUnitId())){
// 所有ID补充完毕,不需调用补用方法
needInsertList.add(dto);
}else { }else {
/**
* 1根据楼宇查询
*/
needDisposeList.add(dto); 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")){
disposeNeighborHoodHouse(dto);
}else if (formDTO.getOrgType().equals("grid")){
disposeGridHouse(dto);
}else if (formDTO.getOrgType().equals("agency")){
disposeAgencyHouse(dto);
} }
} }
/**
* @Description 左侧树点击小区时调用
* @param dto
* @author zxc
* @date 2022/2/14 3:23 下午
*/
public void disposeNeighborHoodHouse(ImportHouseGeneralDTO dto){ public void disposeNeighborHoodHouse(ImportHouseGeneralDTO dto){
neighborHoodName = null == neighborHoodName ? icBuildingDao.selectNeighborHoodNameById(formDTO.getOrgId()) : neighborHoodName; neighborHoodGeneralDTO = null == neighborHoodGeneralDTO ? icBuildingDao.selectNeighborHoodById(formDTO.getOrgId()) : neighborHoodGeneralDTO;
//不是本小区的 //排除不是本小区的
if (!dto.getNeighborHoodName().equals(neighborHoodName)){ if (!dto.getNeighborHoodName().equals(neighborHoodGeneralDTO.getNeighborHoodName())){
nums.add(num); nums.add(num);
}else { }else {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(neighborHoodGeneralDTO.getGridId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
}
// 1.排除网格名不一样但小区名一样 2.排除组织不一样,网格一样,小区一样
if ((!gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName())) ||
(!gridInfo.getAgencyName().equals(dto.getAgencyName()) && gridInfo.getGridName().equals(dto.getGridName()) && neighborHoodGeneralDTO.getNeighborHoodName().equals(dto.getNeighborHoodName()))){
nums.add(num);
return;
}
dto.setNeighborHoodId(formDTO.getOrgId());
dto.setGridId(neighborHoodGeneralDTO.getGridId());
dto.setAgencyId(neighborHoodGeneralDTO.getAgencyId());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
// 填充各种ID
fillData(dto,CustomerGridConstant.NEIGHBORHOOD);
} }
} }
@ -123,7 +253,14 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
// //
dto.setGridId(formDTO.getOrgId()); dto.setGridId(formDTO.getOrgId());
dto.setAgencyId(gridInfo.getPid()); dto.setAgencyId(gridInfo.getPid());
fillData(dto); AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
// 填充各种ID
fillData(dto, CustomerGridConstant.GRID);
} }
} }
@ -154,15 +291,30 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
} }
dto.setGridId(cacheGridName.toString()); dto.setGridId(cacheGridName.toString());
dto.setAgencyId(formDTO.getOrgId()); dto.setAgencyId(formDTO.getOrgId());
fillData(dto); AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
// 填充各种ID
fillData(dto, CustomerGridConstant.AGENCY);
} }
} }
public void fillData(ImportHouseGeneralDTO dto){ public void fillData(ImportHouseGeneralDTO dto,String orgType){
neighborHoodInfos = null == neighborHoodInfos ? getNeighborHoodInfos(Arrays.asList(formDTO.getOrgId())) : neighborHoodInfos; if (orgType.equals(CustomerGridConstant.GRID) || orgType.equals(CustomerGridConstant.AGENCY)){
Object cacheNeighBorHood = icHouseRedis.getTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId(), formDTO.getOrgId() + "_" + dto.getNeighborHoodName()); List<String> gridIds = new ArrayList<>();
// 赋值小区ID if (orgType.equals(CustomerGridConstant.GRID)){
dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString()); gridIds = Arrays.asList(formDTO.getOrgId());
}else if (orgType.equals(CustomerGridConstant.AGENCY)){
gridIds = gridInfoDTOs.stream().map(m -> m.getGridId()).collect(Collectors.toList());
}
neighborHoodInfos = null == neighborHoodInfos ? getNeighborHoodInfos(gridIds) : neighborHoodInfos;
Object cacheNeighBorHood = icHouseRedis.getTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId(), formDTO.getOrgId() + "_" + dto.getNeighborHoodName());
// 赋值小区ID
dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
}
if (StringUtils.isNotBlank(dto.getNeighborHoodId())){ if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
//小区ID不为空赋值楼栋ID //小区ID不为空赋值楼栋ID
buildingInfos = null == buildingInfos ? getBuildingInfos(dto.getNeighborHoodId()) : buildingInfos; buildingInfos = null == buildingInfos ? getBuildingInfos(dto.getNeighborHoodId()) : buildingInfos;
@ -241,13 +393,29 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
@Override @Override
public void doAfterAllAnalysed(AnalysisContext context) { public void doAfterAllAnalysed(AnalysisContext context) {
finalDispose();
// 删除缓存 // 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId()); icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId()); icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId()); icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId()); icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId()); icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
// 放结果
icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
}
/**
* @Description 房屋信息插入
* @param houses
* @author zxc
* @date 2022/2/14 5:21 下午
*/
@Transactional(rollbackFor = Exception.class)
public void houseInsert(List<ImportHouseGeneralDTO> houses){
if (!CollectionUtils.isEmpty(houses)){
icHouseService.insertBatch(ConvertUtils.sourceToTarget(houses, IcHouseEntity.class));
}
} }
} }

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

@ -25,6 +25,7 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IcHouseDao; import com.epmet.dao.IcHouseDao;
import com.epmet.dto.ImportHouseGeneralDTO; import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.result.HouseInfoDTO; import com.epmet.dto.result.HouseInfoDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.model.HouseInfoModel; import com.epmet.model.HouseInfoModel;
import com.epmet.model.HouseInfoModelDTO; import com.epmet.model.HouseInfoModelDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -292,4 +293,19 @@ public class IcHouseRedis {
redisUtils.delete(key); redisUtils.delete(key);
} }
public void setImportResultDTO(String customerId, String userId, ImportResultDTO dto){
String key = RedisKeys.getTemporaryImportResultCacheKey(customerId,userId);
Map<String, Object> result = BeanUtil.beanToMap(dto, false, true);
redisUtils.hMSet(key,result,RedisUtils.MINUTE_ONE_EXPIRE);
}
public ImportResultDTO getImportResultDTO(String customerId, String userId){
String key = RedisKeys.getTemporaryImportResultCacheKey(customerId,userId);
Map<String, Object> map = redisUtils.hGetAll(key);
if (CollectionUtils.isEmpty(map)){
return null;
}
return ConvertUtils.mapToEntity(map,ImportResultDTO.class);
}
} }

11
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java

@ -102,4 +102,15 @@ public interface IcBuildingService extends BaseService<IcBuildingEntity> {
* @Date 2021/10/26 14:43 * @Date 2021/10/26 14:43
*/ */
List<OptionResultDTO> getBuildingOptions(String neighborHoodId); List<OptionResultDTO> getBuildingOptions(String neighborHoodId);
/**
* 根据楼栋名获取楼栋信息
*
* @Param neighborHoodId
* @Param buildingName
* @Return {@link IcBuildingDTO}
* @Author zhaoqifeng
* @Date 2022/2/14 15:19
*/
IcBuildingDTO getBuildingInfo(String neighborHoodId, String buildingName);
} }

10
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java

@ -102,4 +102,14 @@ public interface IcBuildingUnitService extends BaseService<IcBuildingUnitEntity>
* @Date 2021/10/26 14:49 * @Date 2021/10/26 14:49
*/ */
List<OptionResultDTO> getUnitOptions(String buildingId); List<OptionResultDTO> getUnitOptions(String buildingId);
/**
* 根据单元名获取单元信息
* @Param buildingId
* @Param unitName
* @Return {@link IcBuildingUnitDTO}
* @Author zhaoqifeng
* @Date 2022/2/14 15:42
*/
IcBuildingUnitDTO getUnitInfo(String buildingId, String unitName);
} }

12
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java

@ -22,6 +22,7 @@ import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.IcNeighborHoodDTO; import com.epmet.dto.IcNeighborHoodDTO;
import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO; import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.entity.IcNeighborHoodEntity; import com.epmet.entity.IcNeighborHoodEntity;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -125,4 +126,15 @@ public interface IcNeighborHoodService extends BaseService<IcNeighborHoodEntity>
* @date 2022/2/12 11:11 上午 * @date 2022/2/12 11:11 上午
*/ */
Result neighborhoodImport(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException; Result neighborhoodImport(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException;
/**
* 获取导入小区楼栋单元ID
*
* @Param formDTO
* @Param list
* @Return {@link List< ImportHouseGeneralDTO>}
* @Author zhaoqifeng
* @Date 2022/2/14 9:40
*/
List<ImportHouseGeneralDTO> getImportInfo(ImportInfoFormDTO formDTO, List<ImportHouseGeneralDTO> list);
} }

20
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java

@ -133,4 +133,24 @@ public class IcBuildingServiceImpl extends BaseServiceImpl<IcBuildingDao, IcBuil
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
/**
* 根据楼栋名获取楼栋信息
*
* @param neighborHoodId
* @param buildingName
* @Param neighborHoodId
* @Param buildingName
* @Return {@link IcBuildingDTO}
* @Author zhaoqifeng
* @Date 2022/2/14 15:19
*/
@Override
public IcBuildingDTO getBuildingInfo(String neighborHoodId, String buildingName) {
LambdaQueryWrapper<IcBuildingEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcBuildingEntity::getNeighborHoodId, neighborHoodId);
wrapper.eq(IcBuildingEntity::getBuildingName, buildingName);
IcBuildingEntity entity = baseDao.selectOne(wrapper);
return ConvertUtils.sourceToTarget(entity, IcBuildingDTO.class);
}
} }

20
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java

@ -133,4 +133,24 @@ public class IcBuildingUnitServiceImpl extends BaseServiceImpl<IcBuildingUnitDao
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
/**
* 根据单元名获取单元信息
*
* @param buildingId
* @param unitName
* @Param buildingId
* @Param unitName
* @Return {@link IcBuildingUnitDTO}
* @Author zhaoqifeng
* @Date 2022/2/14 15:42
*/
@Override
public IcBuildingUnitDTO getUnitInfo(String buildingId, String unitName) {
LambdaQueryWrapper<IcBuildingUnitEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcBuildingUnitEntity::getBuildingId, buildingId);
wrapper.eq(IcBuildingUnitEntity::getUnitNum, unitName);
IcBuildingUnitEntity entity = baseDao.selectOne(wrapper);
return ConvertUtils.sourceToTarget(entity, IcBuildingUnitDTO.class);
}
} }

152
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java

@ -39,17 +39,12 @@ import com.epmet.constant.CustomerGridConstant;
import com.epmet.dao.CustomerGridDao; import com.epmet.dao.CustomerGridDao;
import com.epmet.dao.IcNeighborHoodDao; import com.epmet.dao.IcNeighborHoodDao;
import com.epmet.dao.IcPropertyManagementDao; import com.epmet.dao.IcPropertyManagementDao;
import com.epmet.dto.IcNeighborHoodDTO; import com.epmet.dto.*;
import com.epmet.dto.NeighborHoodAndManagementDTO;
import com.epmet.dto.form.ImportInfoFormDTO; import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.result.InfoByNamesResultDTO; import com.epmet.dto.result.InfoByNamesResultDTO;
import com.epmet.entity.IcNeighborHoodEntity; import com.epmet.entity.*;
import com.epmet.entity.IcNeighborHoodPropertyEntity;
import com.epmet.entity.IcPropertyManagementEntity;
import com.epmet.excel.IcNeighborHoodExcel; import com.epmet.excel.IcNeighborHoodExcel;
import com.epmet.service.IcNeighborHoodPropertyService; import com.epmet.service.*;
import com.epmet.service.IcNeighborHoodService;
import com.epmet.service.IcPropertyManagementService;
import com.epmet.util.ExcelPoiUtils; import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@ -60,6 +55,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -82,6 +78,10 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
private IcPropertyManagementService propertyManagementService; private IcPropertyManagementService propertyManagementService;
@Autowired @Autowired
private IcNeighborHoodPropertyService neighborHoodPropertyService; private IcNeighborHoodPropertyService neighborHoodPropertyService;
@Resource
private IcBuildingService icBuildingService;
@Resource
private IcBuildingUnitService icBuildingUnitService;
@Override @Override
public PageData<IcNeighborHoodDTO> page(Map<String, Object> params) { public PageData<IcNeighborHoodDTO> page(Map<String, Object> params) {
@ -406,4 +406,140 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
}); });
} }
/**
* 获取导入小区楼栋单元ID
*
* @param formDTO
* @param list
* @Param formDTO
* @Param list
* @Return {@link List< ImportHouseGeneralDTO >}
* @Author zhaoqifeng
* @Date 2022/2/14 9:40
*/
@Override
public List<ImportHouseGeneralDTO> getImportInfo(ImportInfoFormDTO formDTO, List<ImportHouseGeneralDTO> list) {
list.forEach(item -> {
if (StringUtils.isEmpty(item.getNeighborHoodId())) {
//1.获取小区ID,判断小区是否存在,不存在则添加小区,存在则直接获取小区ID
String neighborHoodId = getNeighborHoodId(formDTO.getCustomerId(), item);
item.setNeighborHoodId(neighborHoodId);
//2.获取楼栋ID,判断楼栋是否存在,不存在则添加楼栋,存在则直接获取楼栋ID
if (StringUtils.isEmpty(item.getBuildingId())) {
String buildingId = getBuildingId(formDTO.getCustomerId(), item);
item.setBuildingId(buildingId);
}
//3.获取单元ID,判断单元是否存在,不存在则添加单元,存在则直接获取单元ID
if (null != item.getBuildingUnit()) {
String unitId = getUnitId(formDTO.getCustomerId(), item);
item.setBuildingUnitId(unitId);
}
} else if (StringUtils.isNotEmpty(item.getNeighborHoodId()) && StringUtils.isEmpty(item.getBuildingId())) {
//获取楼栋ID,判断楼栋是否存在,不存在则添加楼栋,存在则直接获取楼栋ID
String buildingId = getBuildingId(formDTO.getCustomerId(), item);
item.setBuildingId(buildingId);
//获取单元ID,判断单元是否存在,不存在则添加单元,存在则直接获取单元ID
if (null != item.getBuildingUnit()) {
String unitId = getUnitId(formDTO.getCustomerId(), item);
item.setBuildingUnitId(unitId);
}
}
});
return list;
}
/**
* 根据小区名获取小区ID如果没有先新增小区
* @Param gridId
* @Param name
* @Return {@link String}
* @Author zhaoqifeng
* @Date 2022/2/14 9:50
*/
private String getNeighborHoodId(String customerId, ImportHouseGeneralDTO info) {
//根据网格ID和小区名获取小区信息
LambdaQueryWrapper<IcNeighborHoodEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcNeighborHoodEntity::getGridId, info.getGridId());
wrapper.eq(IcNeighborHoodEntity::getNeighborHoodName, info.getNeighborHoodName());
IcNeighborHoodEntity entity = baseDao.selectOne(wrapper);
if (null != entity) {
return entity.getId();
}
entity = new IcNeighborHoodEntity();
entity.setCustomerId(customerId);
entity.setAgencyId(info.getAgencyId());
entity.setParentAgencyId(info.getPid());
entity.setAgencyPids(info.getPids());
entity.setGridId(info.getGridId());
entity.setNeighborHoodName(info.getNeighborHoodName());
baseDao.insert(entity);
return entity.getId();
}
/**
* 获取楼栋ID
* @Param customerId
* @Param info
* @Return {@link String}
* @Author zhaoqifeng
* @Date 2022/2/14 15:36
*/
private String getBuildingId(String customerId, ImportHouseGeneralDTO info) {
//根据小区ID和楼栋名获取楼栋信息
IcBuildingDTO building = icBuildingService.getBuildingInfo(info.getNeighborHoodId(), info.getBuildingName());
if (null != building) {
return building.getId();
}
IcBuildingEntity buildingEntity = new IcBuildingEntity();
buildingEntity.setCustomerId(customerId);
buildingEntity.setNeighborHoodId(info.getNeighborHoodId());
buildingEntity.setBuildingName(info.getBuildingName());
buildingEntity.setType(null == info.getType()?NumConstant.ONE_STR:info.getType());
buildingEntity.setSort(NumConstant.ZERO);
buildingEntity.setTotalUnitNum(info.getTotalUnitNum());
buildingEntity.setTotalFloorNum(info.getTotalFloorNum());
buildingEntity.setTotalHouseNum(info.getTotalHouseNum());
icBuildingService.insert(buildingEntity);
if (null != info.getTotalUnitNum() && info.getTotalUnitNum() > NumConstant.ZERO) {
//设置楼宇单元
List<IcBuildingUnitEntity> unitList = new ArrayList<>();
for (int i =0 ; i<info.getTotalUnitNum(); i++){
IcBuildingUnitEntity icBuildingUnit= new IcBuildingUnitEntity();
icBuildingUnit.setCustomerId(customerId);
icBuildingUnit.setBuildingId(buildingEntity.getId());
icBuildingUnit.setUnitName((i + 1) +"单元");
icBuildingUnit.setUnitNum(String.valueOf(i+1));
unitList.add(icBuildingUnit);
}
icBuildingUnitService.insertBatch(unitList);
}
return buildingEntity.getId();
}
/**
* 获取单元ID
* @Param customerId
* @Param info
* @Return {@link String}
* @Author zhaoqifeng
* @Date 2022/2/14 16:01
*/
private String getUnitId(String customerId, ImportHouseGeneralDTO info) {
//根据楼栋ID和单元名获取单元信息
IcBuildingUnitDTO unit = icBuildingUnitService.getUnitInfo(info.getBuildingId(), String.valueOf(info.getBuildingUnit()));
if (null != unit) {
return unit.getId();
}
IcBuildingUnitEntity unitEntity = new IcBuildingUnitEntity();
unitEntity.setCustomerId(customerId);
unitEntity.setBuildingId(info.getBuildingId());
unitEntity.setUnitName(info.getBuildingUnit() +"单元");
unitEntity.setUnitNum(String.valueOf(info.getBuildingUnit()));
icBuildingUnitService.insert(unitEntity);
return unitEntity.getId();
}
} }

2
epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.11__edit_neighbor_hood.sql

@ -0,0 +1,2 @@
ALTER TABLE `epmet_gov_org`.`ic_neighbor_hood`
MODIFY COLUMN `ADDRESS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '详细地址' AFTER `GRID_ID`;

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

@ -283,4 +283,47 @@
AND BUILDING_ID = #{building} AND BUILDING_ID = #{building}
</select> </select>
<!-- 根据ID查询小区 -->
<select id="selectNeighborHoodById" resultType="com.epmet.dto.ImportHouseGeneralDTO">
SELECT
AGENCY_ID,
GRID_ID,
ID AS neighborHoodId,
NEIGHBOR_HOOD_NAME
FROM ic_neighbor_hood
WHERE DEL_FLAG = '0'
AND ID = #{id}
</select>
<!-- 根据ID查询楼栋 -->
<select id="selectBuildingById" resultType="com.epmet.dto.ImportHouseGeneralDTO">
SELECT
b.ID AS buildingId,
b.BUILDING_NAME,
b.NEIGHBOR_HOOD_ID,
b.TYPE,
b.TOTAL_UNIT_NUM,
b.TOTAL_FLOOR_NUM,
b.TOTAL_HOUSE_NUM,
h.NEIGHBOR_HOOD_NAME,
h.GRID_ID,
h.AGENCY_ID
FROM ic_building b
INNER JOIN ic_neighbor_hood h ON (h.id = b.NEIGHBOR_HOOD_ID AND h.DEL_FLAG = '0')
WHERE b.DEL_FLAG = '0'
AND b.ID = #{id}
</select>
<!-- 查询已存在的房屋 -->
<select id="selectExistHouse" resultType="java.lang.String">
SELECT CONCAT(BUILDING_UNIT_ID,'_',DOOR_NAME) FROM ic_house
WHERE DEL_FLAG = '0'
AND CONCAT(BUILDING_UNIT_ID,'_',DOOR_NAME) IN
(
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
</select>
</mapper> </mapper>

Loading…
Cancel
Save