Browse Source

Merge remote-tracking branch 'origin/develop' into release_temp

master
yinzuomei 4 years ago
parent
commit
9b3e96ca84
  1. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java
  2. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
  3. 38
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  4. 12
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  5. 4
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml
  6. 4
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StaffPatrolRecordDao.xml
  7. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.java
  8. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java
  9. 4
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
  10. 1
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.xml
  11. 36
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java
  12. 31
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java
  13. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
  14. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
  15. 23
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  16. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
  17. 34
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  18. 38
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java
  19. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java
  20. 41
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModelDTO.java
  21. 315
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
  22. 272
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  23. 191
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
  24. 32
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/NeighborHoodInfoModel.java
  25. 23
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
  26. 11
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
  27. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java
  28. 12
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
  29. 49
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
  30. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
  31. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java
  32. 204
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
  33. 2
      epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.11__edit_neighbor_hood.sql
  34. 51
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
  35. 5
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java
  36. 23
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleShowListFormDTO.java
  37. 13
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java
  38. 5
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java
  39. 5
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java
  40. 7
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java
  41. 38
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
  42. 1
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.3__style_gridpids.sql
  43. 18
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml
  44. 2
      epmet-user/epmet-user-server/deploy/docker-compose-dev.yml
  45. 13
      epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java
  46. 7
      epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java
  47. 10
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java
  48. 119
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  49. 25
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java

@ -10,6 +10,7 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@ -286,6 +287,7 @@ public abstract class BaseRequestLogAspect {
if (object != null
&& !(object instanceof ServletRequest)
&& !(object instanceof ServletResponse)
&& !(object instanceof MultipartFile)
) {
try {
// 尝试作为json解析

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java

@ -95,6 +95,8 @@ public interface StrConstant {
String SPECIAL_CUSTOMER = "150282ed25c14ff0785e7e06283b6283";
//平音客户
String PY_CUSTOMER = "6f203e30de1a65aab7e69c058826cd80";
//平音客户跟组织Id
String PY_ROOT_AGENCY = "53613e1c5de6ed473467f0159a10b135";
/**
* 单位积分,积分上限积分说明积分事件

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

@ -695,4 +695,42 @@ public class RedisKeys {
public static String getTemporaryBuildingUnitInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryBuildingUnit:").concat(customerId).concat(":").concat(userId);
}
/**
* 居民导入-缓存目录key
* @param importTag
* @return
*/
public static String icResiImportBaseKey(String importTag) {
return rootPrefix.concat("resi:").concat("import:").concat(importTag);
}
/**
* 居民导入-数据分类的key
* add新增居民
* category类别变更
* transfer调动
* @param importTag
* @param type
* @return
*/
public static String icResiImportTypeKey(String importTag, String type) {
return icResiImportBaseKey(importTag).concat(":").concat(type);
}
/**
* 居民导入-详细信息key
* @param importTag
* @param type
* @param resiId
* @return
*/
public static String icResiImportResiCategoryKey(String importTag, String type, String 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);
}
}

12
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java

@ -617,16 +617,8 @@ public class GovOrgServiceImpl implements GovOrgService {
//3.查询直属下级组织下网格在查询时间段内存在上报事件(直接立项)数的网格,一天一条
List<GridDateIdResultDTO> projectList = dataStatsService.getGridDateProjectIncrList(formDTO);
//4.汇总数据,一个网格一天只记录一条数据,这条数据可能是例行工作的也可能是上报事件的,也可能某一天两个数都有,但只记录一条
Map<String, String> map = new HashMap<>();
workList.forEach(w -> {
map.put(w.getGridId() + w.getDateId(), w.getDateId());
});
//projectList.stream().filter(pro -> !map.containsKey(pro.getGridId() + pro.getDateId())).forEach(p -> workList.add(p));
projectList.forEach(pro -> {
if (!map.containsKey(pro.getGridId() + pro.getDateId())) {
workList.add(pro);
}
});
Set<String> map = workList.stream().map(o -> o.getGridId() + o.getDateId()).collect(Collectors.toSet());
projectList.stream().filter(pro -> !map.contains(pro.getGridId() + pro.getDateId())).forEach(p -> workList.add(p));
//5.按组织封装数据
//计算百分比使用,保留小数点后两位
NumberFormat numberFormat = NumberFormat.getInstance();

4
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml

@ -1155,8 +1155,8 @@
FROM
fact_grid_member_statistics_daily
WHERE del_flag = '0'
AND DATE_FORMAT(created_time,'%Y%m%d') <![CDATA[ >= ]]> #{startTime}
AND DATE_FORMAT(created_time,'%Y%m%d') <![CDATA[ <= ]]> #{endTime}
AND date_id <![CDATA[ >= ]]> #{startTime}
AND date_id <![CDATA[ <= ]]> #{endTime}
AND project_incr > 0
AND pids LIKE CONCAT('%', #{agencyId}, '%')
GROUP BY grid_id, date_id

4
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StaffPatrolRecordDao.xml

@ -150,8 +150,8 @@
stats_staff_patrol_record_daily
WHERE
del_flag = '0'
AND DATE_FORMAT(created_time,'%Y%m%d') <![CDATA[ >= ]]> #{startTime}
AND DATE_FORMAT(created_time,'%Y%m%d') <![CDATA[ <= ]]> #{endTime}
AND date_id <![CDATA[ >= ]]> #{startTime}
AND date_id <![CDATA[ <= ]]> #{endTime}
AND routine_work_count > 0
AND grid_pids LIKE CONCAT('%', #{agencyId}, '%')
GROUP BY grid_id, date_id

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.java

@ -64,7 +64,7 @@ public interface FactOriginProjectOrgPeriodDailyDao extends BaseDao<FactOriginPr
* @author wangc
* @date 2020.10.19 16:26
*/
void deleteByProjectIds(@Param("list") List<String> list,@Param("customerId") String customerId);
void deleteByProjectIds(@Param("list") List<String> list, @Param("customerId") String customerId, @Param("dateId") String dateId);
/**
* @Description 批量插入

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java

@ -494,14 +494,17 @@ public class ProjectExtractServiceImpl implements ProjectExtractService {
});
if (!CollectionUtils.isEmpty(formattingData)) {
List<String> projectList = new ArrayList<>();
projectList.add(param.getObjectId());
factOriginProjectOrgPeriodDailyDao.deleteByProjectIds(projectList, param.getCustomerId());
if (StringUtils.isNotEmpty(param.getObjectId())) {
projectList.add(param.getObjectId());
}
factOriginProjectOrgPeriodDailyDao.deleteByProjectIds(projectList, param.getCustomerId(), param.getDateId());
Lists.partition(formattingData, NumConstant.ONE_HUNDRED)
.forEach(part -> factOriginProjectOrgPeriodDailyDao.insertBatch(part));
}
}
/**
* @Description 项目节点耗时数据补齐
* @param

4
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java

@ -3,6 +3,7 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.DateUtils;
@ -252,7 +253,8 @@ public class StatsUserServiceImpl implements StatsUserService {
m.setSourceType("external");
m.setParentCustomerId(crm.getParentCustomerId());
m.setPid(pid.toString());
m.setPids(pids.toString());
//20220214 上报数据的pids是从街道开始,需要在前边拼接上平阴县的id才能保证后续的查询用like时可以筛选出数据 sun
m.setPids(StrConstant.PY_ROOT_AGENCY + ":" + pids.toString());
} else {
log.warn(String.format("网格员数据分析上报,数据错误,根据agencyId未查询到组织信息,客户Id->%s,组织Id->%s", m.getCustomerId(), m.getAgencyId()));
iterator.remove();

1
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.xml

@ -40,6 +40,7 @@
WHERE
DEL_FLAG = '0'
AND CUSTOMER_ID = #{customerId}
AND (DATE_FORMAT(INFORMED_DATE,"%Y%m%d") &gt;= #{dateId} OR DATE_FORMAT(HANDLED_DATE,"%Y%m%d") &gt;= #{dateId} OR DATE_FORMAT(PERIOD_TILL_REPLY_FIRSTLY,"%Y%m%d") &gt;= #{dateId})
<if test="null != list and list.size() > 0">
<foreach collection="list" open="AND ( " close=" )" separator=" OR " item="item">
PROJECT_ID = #{item}

36
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportHouseGeneralDTO.java → epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java

@ -11,7 +11,7 @@ import java.io.Serializable;
* @DESC
*/
@Data
public class ImportHouseGeneralDTO implements Serializable {
public class ImportGeneralDTO implements Serializable {
private static final long serialVersionUID = -345610717773879687L;
@ -89,7 +89,8 @@ public class ImportHouseGeneralDTO implements Serializable {
/**
* 是否出租
*/
private String rentFlag;
private String rentFlagString;
private Integer rentFlag;
/**
* 姓名
@ -111,8 +112,39 @@ public class ImportHouseGeneralDTO implements Serializable {
*/
private Integer num;
/**
* 关联物业
*/
private String propertyName;
/**
* 详细地址
*/
private String address;
/**
* 备注
*/
private String remark;
/**
* 房屋ID
*/
private String houseId;
private String houseName;
private String customerId;
private Boolean existStatus = false;
/**
* 楼栋重复状态
*/
private Boolean buildingExistStatus = false;
/**
* 小区重复状态
*/
private Boolean neighborHoodExistStatus = 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 NEIGHBORHOOD = "neighborHood";
String BUILDING = "building";
}

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java

@ -219,7 +219,7 @@ public class BuildingController {
formDTO.setOrgType(orgType);
formDTO.setOrgId(orgId);
formDTO.setUserId(tokenDTO.getUserId());
return new Result().ok(buildingService.buildingImportExcel(formDTO,file));
return buildingService.buildingImportExcel(formDTO,file);
}
/**

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.result.HouseInfoDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.dto.result.LoginUserDetailsResultDTO;
import com.epmet.excel.IcHouseExcel;
import com.epmet.feign.EpmetUserOpenFeignClient;
@ -43,6 +44,8 @@ import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.HouseService;
import com.epmet.service.IcHouseService;
import com.epmet.service.IcNeighborHoodService;
import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -78,6 +81,10 @@ public class HouseController implements ResultDataResolver {
private IcBuildingDao icBuildingDao;
@Autowired
private IcHouseRedis icHouseRedis;
@Autowired
private IcNeighborHoodService neighborHoodService;
@Autowired
private IcHouseService icHouseService;
@PostMapping("houselist")
@ -262,7 +269,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,icBuildingDao,icHouseRedis))
.registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis,neighborHoodService,icHouseService))
.build();
excelReader.read(readSheet);
} finally {
@ -270,7 +277,19 @@ public class HouseController implements ResultDataResolver {
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));
}
}

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java

@ -128,7 +128,7 @@ public class IcNeighborHoodController {
formDTO.setOrgType(orgType);
formDTO.setOrgId(orgId);
formDTO.setUserId(tokenDTO.getUserId());
return new Result().ok(icNeighborHoodService.neighborhoodImport(formDTO,file));
return icNeighborHoodService.neighborhoodImport(formDTO,file);
}
}

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

@ -19,7 +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.ImportGeneralDTO;
import com.epmet.dto.result.BaseInfoFamilyBuildingResultDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.entity.CustomerAgencyEntity;
@ -112,7 +112,7 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
* @author zxc
* @date 2022/2/14 9:48 上午
*/
List<ImportHouseGeneralDTO> selectAllGridByOrgId(@Param("orgId")String orgId);
List<ImportGeneralDTO> selectAllGridByOrgId(@Param("orgId")String orgId);
/**
* @Description 查询网格下所有的小区
@ -120,7 +120,7 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
* @author zxc
* @date 2022/2/14 10:21 上午
*/
List<ImportHouseGeneralDTO> selectAllNeighborHoodByGridIds(@Param("orgIds")List<String> orgId);
List<ImportGeneralDTO> selectAllNeighborHoodByGridIds(@Param("orgIds")List<String> orgId);
/**
* @Description 根据小区ID查询楼栋
@ -128,7 +128,7 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
* @author zxc
* @date 2022/2/14 1:25 下午
*/
List<ImportHouseGeneralDTO> selectAllBuildingByNeighborHoodId(@Param("neighborHoodId")String neighborHoodId);
List<ImportGeneralDTO> selectAllBuildingByNeighborHoodId(@Param("neighborHoodId")String neighborHoodId);
/**
* @Description 根据楼栋ID查询楼栋单元
@ -136,6 +136,30 @@ public interface IcBuildingDao extends BaseDao<IcBuildingEntity> {
* @author zxc
* @date 2022/2/14 1:58 下午
*/
List<ImportHouseGeneralDTO> selectAllBuildingUnitByBuildingId(@Param("building")String building);
List<ImportGeneralDTO> selectAllBuildingUnitByBuildingId(@Param("building")String building);
/**
* @Description 根据ID查询小区
* @param id
* @author zxc
* @date 2022/2/14 3:16 下午
*/
ImportGeneralDTO selectNeighborHoodById(@Param("id")String id);
/**
* @Description 根据ID查询楼栋
* @param id
* @author zxc
* @date 2022/2/14 4:26 下午
*/
ImportGeneralDTO selectBuildingById(@Param("id")String id);
/**
* @Description 查询已存在的房屋
* @param ids
* @author zxc
* @date 2022/2/14 5:32 下午
*/
List<String> selectExistHouse(@Param("ids")List<String> ids);
}

38
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java

@ -0,0 +1,38 @@
package com.epmet.model;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @Author zxc
* @DateTime 2022/2/15 10:07 上午
* @DESC
*/
@Data
public class BuildingInfoModel {
@ExcelProperty(value = "所属组织")
private String agencyName;
@ExcelProperty(value = "所属网格")
private String gridName;
@ExcelProperty(value = "小区名称")
private String neighborHoodName;
@ExcelProperty(value = "楼栋名称")
private String buildingName;
@ExcelProperty(value = "楼栋类型")
private String type;
@ExcelProperty(value = "单元数")
private Integer totalUnitNum;
@ExcelProperty(value = "层数")
private Integer totalFloorNum;
@ExcelProperty(value = "户数")
private Integer totalHouseNum;
}

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;
@ExcelProperty(value = "出租")
private String rentFlag;
private String rentFlagString;
@ExcelProperty(value = "房主姓名")
private String ownerName;

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

@ -1,41 +0,0 @@
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;
}

315
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java

@ -0,0 +1,315 @@
package com.epmet.model;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetException;
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.utils.ConvertUtils;
import com.epmet.constant.CustomerGridConstant;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.enums.BuildingTypeEnums;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.IcNeighborHoodService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author zxc
* @DateTime 2022/2/15 10:06 上午
* @DESC
*/
public class ImportBuildingInfoListener extends AnalysisEventListener<BuildingInfoModel> {
List<Integer> nums = new ArrayList<>();
Integer num = NumConstant.ZERO;
List<ImportGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportGeneralDTO> needInsertList = new ArrayList<>();
String gridName = null;
String agencyName = null;
Map<String, Object> gridInfos = null;
List<ImportGeneralDTO> gridInfoDTOs = null;
Map<String, Object> neighborHoodInfos = null;
List<ImportGeneralDTO> neighborHoodInfoDTOs = null;
ImportGeneralDTO neighborHoodGeneralDTO = null;
Map<String, Object> buildingInfos = null;
List<ImportGeneralDTO> buildingInfoDTOs = null;
ImportGeneralDTO buildingGeneralDTO = null;
private ImportInfoFormDTO formDTO;
private IcHouseRedis icHouseRedis;
private IcBuildingDao icBuildingDao;
private IcNeighborHoodService neighborHoodService;
public ImportBuildingInfoListener(ImportInfoFormDTO formDTO, IcHouseRedis icHouseRedis,IcBuildingDao icBuildingDao,IcNeighborHoodService neighborHoodService){
this.formDTO = formDTO;
this.icHouseRedis = icHouseRedis;
this.icBuildingDao = icBuildingDao;
this.neighborHoodService = neighborHoodService;
}
@Override
public void invoke(BuildingInfoModel data, AnalysisContext context) {
if (null == data){
return;
}
num = num + NumConstant.ONE;
ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
dto.setNum(num);
dto.setCustomerId(formDTO.getCustomerId());
dto.setType(BuildingTypeEnums.getKeyByValue(dto.getType()));
if (formDTO.getOrgType().equals(CustomerGridConstant.NEIGHBORHOOD)){
disposeNeighborHoodBuilding(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
disposeGridBuilding(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
disposeAgencyBuilding(dto);
}
// 数据筛选完毕,当num每满100条,处理一次
if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
finalDispose();
}
}
public void finalDispose(){
Map<String, Long> groupByAllName = needDisposeList.stream().collect(Collectors.groupingBy(
n -> n.getAgencyName() + "_" + n.getGridName() + "_" +
n.getNeighborHoodName() + "_" + n.getBuildingName(), Collectors.counting()));
groupByAllName.forEach((k,v) -> {
if (Integer.valueOf(v.toString()).compareTo(1) > 0){
for (ImportGeneralDTO r : needDisposeList) {
if (k.equals(r.getAgencyName() + "_" + r.getGridName() + "_" +
r.getNeighborHoodName() + "_" + r.getBuildingName())){
// 集合里重复的
r.setExistStatus(true);
nums.add(r.getNum());
}
}
}
});
Map<Boolean, List<ImportGeneralDTO>> groupByStatus = needDisposeList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus));
List<ImportGeneralDTO> importGeneralDTOS = groupByStatus.get(false);
if (!CollectionUtils.isEmpty(importGeneralDTOS)){
List<ImportGeneralDTO> importInfo = neighborHoodService.getImportInfo(formDTO, importGeneralDTOS);
Map<Boolean, List<ImportGeneralDTO>> groupByBuildingExistStatus = importInfo.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getBuildingExistStatus));
List<ImportGeneralDTO> existList = groupByBuildingExistStatus.get(true);
if (!CollectionUtils.isEmpty(existList)){
existList.forEach(e -> {
nums.add(e.getNum());
});
}
}
// 清除
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;
}
public void fillData(ImportGeneralDTO dto, String orgType){
if (orgType.equals(CustomerGridConstant.GRID) || orgType.equals(CustomerGridConstant.AGENCY)){
List<String> gridIds = new ArrayList<>();
if (orgType.equals(CustomerGridConstant.GRID)){
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())){
//小区ID不为空赋值楼栋ID
buildingInfos = null == buildingInfos ? getBuildingInfos(dto.getNeighborHoodId()) : buildingInfos;
Object cacheBuilding = icHouseRedis.getTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId(), dto.getNeighborHoodId() + "_" + dto.getBuildingName());
dto.setBuildingId(null == cacheBuilding ? "" : cacheBuilding.toString());
if (StringUtils.isNotBlank(dto.getBuildingId())){
// 说明数据库已存在此楼栋,不需添加
nums.add(num);
}else {
needDisposeList.add(dto);
}
}else {
needDisposeList.add(dto);
}
}
/**
* @Description 左侧树点击小区时调用
* @param dto
* @author zxc
* @date 2022/2/15 10:41 上午
*/
public void disposeNeighborHoodBuilding(ImportGeneralDTO dto){
neighborHoodGeneralDTO = null == neighborHoodGeneralDTO ? icBuildingDao.selectNeighborHoodById(formDTO.getOrgId()) : neighborHoodGeneralDTO;
//排除不是本小区的
if (!dto.getNeighborHoodName().equals(neighborHoodGeneralDTO.getNeighborHoodName())){
nums.add(num);
}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);
}
}
/**
* @Description 左侧树点击网格时调用
* @param dto
* @author zxc
* @date 2022/2/15 10:41 上午
*/
public void disposeGridBuilding(ImportGeneralDTO dto){
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
}
//排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
if (!dto.getGridName().equals(gridName) || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
nums.add(num);
}else {
//
dto.setGridId(formDTO.getOrgId());
dto.setAgencyId(gridInfo.getPid());
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);
}
}
/**
* @Description 左侧树点击组织时调用
* @param dto
* @author zxc
* @date 2022/2/15 10:41 上午
*/
public void disposeAgencyBuilding(ImportGeneralDTO dto){
agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
//排除不是本组织的
if (!dto.getAgencyName().equals(agencyName)){
nums.add(num);
}else {
// 根据组织查询出所有网格,甩出不是本组织下的网格
gridInfos = null == gridInfos ? getGridInfos(formDTO.getOrgId()) : gridInfos;
if (null == gridInfos){
// 组织下确实不存在网格
nums.add(num);
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());
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);
}
}
/**
* @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;
}
/**
* @Description 获取小区下的楼栋
* @param neighborHoodId
* @author zxc
* @date 2022/2/14 1:32 下午
*/
public Map<String,Object> getBuildingInfos(String neighborHoodId){
buildingInfoDTOs = icBuildingDao.selectAllBuildingByNeighborHoodId(neighborHoodId);
buildingInfos = buildingInfoDTOs.stream().collect(Collectors.toMap(n -> n.getNeighborHoodId() + "_" + n.getBuildingName(), n -> n.getBuildingId()));
icHouseRedis.setTemporaryCacheBuilding(formDTO.getCustomerId(), buildingInfos, formDTO.getUserId());
return buildingInfos;
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
finalDispose();
// 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuildingUnit(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheHouses(formDTO.getCustomerId(), formDTO.getUserId());
// 放结果
icHouseRedis.setImportResultDTO(formDTO.getCustomerId(), formDTO.getUserId(), new ImportResultDTO(nums,num));
}
}

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

@ -2,17 +2,26 @@ 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.exception.EpmetException;
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.utils.ConvertUtils;
import com.epmet.constant.CustomerGridConstant;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.ImportHouseGeneralDTO;
import com.epmet.dto.ImportGeneralDTO;
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.redis.IcHouseRedis;
import com.epmet.service.IcHouseService;
import com.epmet.service.IcNeighborHoodService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
@ -28,31 +37,35 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
List<Integer> nums = new ArrayList<>();
Integer num = NumConstant.ZERO;
List<ImportHouseGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportHouseGeneralDTO> needInsertList = new ArrayList<>();
List<ImportGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportGeneralDTO> needInsertList = new ArrayList<>();
String buildingName = null;
String neighborHoodName = null;
String gridName = null;
String agencyName = null;
Map<String, Object> gridInfos = null;
List<ImportHouseGeneralDTO> gridInfoDTOs = null;
List<ImportGeneralDTO> gridInfoDTOs = null;
Map<String, Object> neighborHoodInfos = null;
List<ImportHouseGeneralDTO> neighborHoodInfoDTOs = null;
List<ImportGeneralDTO> neighborHoodInfoDTOs = null;
ImportGeneralDTO neighborHoodGeneralDTO = null;
Map<String, Object> buildingInfos = null;
List<ImportHouseGeneralDTO> buildingInfoDTOs = null;
List<ImportGeneralDTO> buildingInfoDTOs = null;
ImportGeneralDTO buildingGeneralDTO = null;
Map<String, Object> buildingUnitInfos = null;
List<ImportHouseGeneralDTO> buildingUnitInfoDTOs = null;
List<ImportGeneralDTO> buildingUnitInfoDTOs = null;
private ImportInfoFormDTO formDTO;
private IcBuildingDao icBuildingDao;
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.icBuildingDao = icBuildingDao;
this.icHouseRedis = icHouseRedis;
this.neighborHoodService = neighborHoodService;
this.icHouseService = icHouseService;
}
@Override
@ -61,46 +74,159 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
return;
}
num = num + NumConstant.ONE;
ImportHouseGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportHouseGeneralDTO.class);
ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
dto.setNum(num);
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")){
dto.setCustomerId(formDTO.getCustomerId());
dto.setHouseType(HouseTypeEnums.getKeyByValue(dto.getHouseType()));
dto.setPurpose(HousePurposeEnums.getKeyByValue(dto.getPurpose()));
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("grid")){
}else if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
disposeGridHouse(dto);
}else if (formDTO.getOrgType().equals("agency")){
}else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
disposeAgencyHouse(dto);
}
// 数据筛选完毕,当num每满100条,处理一次
if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
finalDispose();
}
}
public void disposeNeighborHoodHouse(ImportHouseGeneralDTO dto){
neighborHoodName = null == neighborHoodName ? icBuildingDao.selectNeighborHoodNameById(formDTO.getOrgId()) : neighborHoodName;
//不是本小区的
if (!dto.getNeighborHoodName().equals(neighborHoodName)){
public void finalDispose(){
List<ImportGeneralDTO> 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 (ImportGeneralDTO 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 (ImportGeneralDTO n : needInsertList) {
if ((n.getBuildingUnitId()+"_"+n.getDoorName()).equals(e)){
// 库里存在的
n.setExistStatus(true);
nums.add(n.getNum());
}
}
});
// 根据存在状态分组
Map<Boolean, List<ImportGeneralDTO>> groupByExistStatus = needInsertList.stream().collect(Collectors.groupingBy(ImportGeneralDTO::getExistStatus));
List<ImportGeneralDTO> importGeneralDTOS = groupByExistStatus.get(false);
houseInsert(importGeneralDTOS);
// 清除
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(ImportGeneralDTO 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);
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 {
needDisposeList.add(dto);
}
}
}
/**
* @Description 左侧树点击小区时调用
* @param dto
* @author zxc
* @date 2022/2/14 3:23 下午
*/
public void disposeNeighborHoodHouse(ImportGeneralDTO dto){
neighborHoodGeneralDTO = null == neighborHoodGeneralDTO ? icBuildingDao.selectNeighborHoodById(formDTO.getOrgId()) : neighborHoodGeneralDTO;
//排除不是本小区的
if (!dto.getNeighborHoodName().equals(neighborHoodGeneralDTO.getNeighborHoodName())){
nums.add(num);
}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);
}
}
@ -110,7 +236,7 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
* @author zxc
* @date 2022/2/14 2:14 下午
*/
public void disposeGridHouse(ImportHouseGeneralDTO dto){
public void disposeGridHouse(ImportGeneralDTO dto){
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
@ -123,7 +249,14 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
//
dto.setGridId(formDTO.getOrgId());
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);
}
}
@ -133,7 +266,7 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
* @author zxc
* @date 2022/2/14 1:35 下午
*/
public void disposeAgencyHouse(ImportHouseGeneralDTO dto){
public void disposeAgencyHouse(ImportGeneralDTO dto){
agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
//排除不是本组织的
if (!dto.getAgencyName().equals(agencyName)){
@ -154,15 +287,30 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
}
dto.setGridId(cacheGridName.toString());
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){
neighborHoodInfos = null == neighborHoodInfos ? getNeighborHoodInfos(Arrays.asList(formDTO.getOrgId())) : neighborHoodInfos;
Object cacheNeighBorHood = icHouseRedis.getTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId(), formDTO.getOrgId() + "_" + dto.getNeighborHoodName());
// 赋值小区ID
dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
public void fillData(ImportGeneralDTO dto, String orgType){
if (orgType.equals(CustomerGridConstant.GRID) || orgType.equals(CustomerGridConstant.AGENCY)){
List<String> gridIds = new ArrayList<>();
if (orgType.equals(CustomerGridConstant.GRID)){
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(), dto.getGridId() + "_" + dto.getNeighborHoodName());
// 赋值小区ID
dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
}
if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
//小区ID不为空赋值楼栋ID
buildingInfos = null == buildingInfos ? getBuildingInfos(dto.getNeighborHoodId()) : buildingInfos;
@ -234,20 +382,38 @@ public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoMode
*/
public Map<String,Object> getBuildingUnitInfos(String buildingId){
buildingUnitInfoDTOs = icBuildingDao.selectAllBuildingUnitByBuildingId(buildingId);
buildingUnitInfos = buildingInfoDTOs.stream().collect(Collectors.toMap(n -> n.getBuildingId() + "_" + n.getBuildingUnit(), n -> n.getBuildingUnitId()));
icHouseRedis.setTemporaryCacheBuildingUnit(formDTO.getCustomerId(), buildingUnitInfos, formDTO.getUserId());
if (!CollectionUtils.isEmpty(buildingUnitInfoDTOs)){
buildingUnitInfos = buildingUnitInfoDTOs.stream().collect(Collectors.toMap(n -> n.getBuildingId() + "_" + n.getBuildingUnit(), n -> n.getBuildingUnitId()));
icHouseRedis.setTemporaryCacheBuildingUnit(formDTO.getCustomerId(), buildingUnitInfos, formDTO.getUserId());
}
return buildingInfos;
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
finalDispose();
// 删除缓存
icHouseRedis.delTemporaryCacheGrids(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheNeighBorHood(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId());
icHouseRedis.delTemporaryCacheBuildingUnit(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<ImportGeneralDTO> houses){
if (!CollectionUtils.isEmpty(houses)){
icHouseService.insertBatch(ConvertUtils.sourceToTarget(houses, IcHouseEntity.class));
}
}
}

191
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java

@ -0,0 +1,191 @@
package com.epmet.model;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetException;
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.utils.ConvertUtils;
import com.epmet.constant.CustomerGridConstant;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.IcNeighborHoodService;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author zxc
* @DateTime 2022/2/15 2:16 下午
* @DESC
*/
public class ImportNeighborHoodInfoListener extends AnalysisEventListener<NeighborHoodInfoModel> {
List<Integer> nums = new ArrayList<>();
Integer num = NumConstant.ZERO;
List<ImportGeneralDTO> needDisposeList = new ArrayList<>();
List<ImportGeneralDTO> needInsertList = new ArrayList<>();
String gridName = null;
String agencyName = null;
Map<String, Object> gridInfos = null;
List<ImportGeneralDTO> gridInfoDTOs = null;
Map<String, Object> neighborHoodInfos = null;
List<ImportGeneralDTO> neighborHoodInfoDTOs = null;
ImportGeneralDTO neighborHoodGeneralDTO = null;
private ImportInfoFormDTO formDTO;
private IcHouseRedis icHouseRedis;
private IcBuildingDao icBuildingDao;
private IcNeighborHoodService neighborHoodService;
public ImportNeighborHoodInfoListener(ImportInfoFormDTO formDTO, IcHouseRedis icHouseRedis,IcBuildingDao icBuildingDao,IcNeighborHoodService neighborHoodService){
this.formDTO = formDTO;
this.icHouseRedis = icHouseRedis;
this.icBuildingDao = icBuildingDao;
this.neighborHoodService = neighborHoodService;
}
@Override
public void invoke(NeighborHoodInfoModel data, AnalysisContext context) {
if (null == data){
return;
}
num = num + NumConstant.ONE;
ImportGeneralDTO dto = ConvertUtils.sourceToTarget(data, ImportGeneralDTO.class);
dto.setNum(num);
dto.setCustomerId(formDTO.getCustomerId());
if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
disposeGridNeighborHood(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
disposeAgencyNeighborHood(dto);
}
}
/**
* @Description 左侧树点击网格时调用
* @param dto
* @author zxc
* @date 2022/2/15 2:37 下午
*/
public void disposeGridNeighborHood(ImportGeneralDTO dto){
gridName = null == gridName ? icBuildingDao.selectGridNameById(formDTO.getOrgId()) : gridName;
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("查询网格失败...");
}
//排除不是本网格的 gridName不一样排除,gridName一样但是agencyName不一样也得排除
if (!dto.getGridName().equals(gridName) || (!dto.getAgencyName().equals(gridInfo.getAgencyName()) && dto.getGridName().equals(gridName))){
nums.add(num);
}else {
//
dto.setGridId(formDTO.getOrgId());
dto.setAgencyId(gridInfo.getPid());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
fillData(dto,CustomerGridConstant.GRID);
}
}
/**
* @Description 左侧树点击组织时调用
* @param dto
* @author zxc
* @date 2022/2/15 2:37 下午
*/
public void disposeAgencyNeighborHood(ImportGeneralDTO dto){
agencyName = null == agencyName ? icBuildingDao.selectAgencyNameById(formDTO.getOrgId()) : agencyName;
//排除不是本组织的
if (!dto.getAgencyName().equals(agencyName)){
nums.add(num);
}else {
// 根据组织查询出所有网格,甩出不是本组织下的网格
gridInfos = null == gridInfos ? getGridInfos(formDTO.getOrgId()) : gridInfos;
if (null == gridInfos){
// 组织下确实不存在网格
nums.add(num);
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());
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(dto.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
dto.setPid(agencyInfo.getPid());
dto.setPids(agencyInfo.getPids());
fillData(dto,CustomerGridConstant.AGENCY);
}
}
public void fillData(ImportGeneralDTO dto,String orgType){
List<String> gridIds = new ArrayList<>();
if (orgType.equals(CustomerGridConstant.GRID)){
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(), dto.getGridId() + "_" + dto.getNeighborHoodName());
// 赋值小区ID
dto.setNeighborHoodId(null == cacheNeighBorHood ? "" : cacheNeighBorHood.toString());
if (StringUtils.isNotBlank(dto.getNeighborHoodId())){
// 小区已存在
nums.add(dto.getNum());
}else {
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) {
}
}

32
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/NeighborHoodInfoModel.java

@ -0,0 +1,32 @@
package com.epmet.model;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @Author zxc
* @DateTime 2022/2/15 2:15 下午
* @DESC
*/
@Data
public class NeighborHoodInfoModel {
@ExcelProperty(value = "所属组织")
private String agencyName;
@ExcelProperty(value = "所属网格")
private String gridName;
@ExcelProperty(value = "小区名称")
private String neighborHoodName;
@ExcelProperty(value = "关联物业")
private String propertyName;
@ExcelProperty(value = "详细地址")
private String address;
@ExcelProperty(value = "备注")
private String remark;
}

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

@ -18,23 +18,17 @@
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 com.epmet.dto.result.ImportResultDTO;
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;
/**
@ -292,4 +286,19 @@ public class IcHouseRedis {
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
*/
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
*/
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.utils.Result;
import com.epmet.dto.IcNeighborHoodDTO;
import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.entity.IcNeighborHoodEntity;
import org.springframework.web.multipart.MultipartFile;
@ -125,4 +126,15 @@ public interface IcNeighborHoodService extends BaseService<IcNeighborHoodEntity>
* @date 2022/2/12 11:11 上午
*/
Result neighborhoodImport(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException;
/**
* 获取导入小区楼栋单元ID
*
* @Param formDTO
* @Param list
* @Return {@link List< ImportGeneralDTO >}
* @Author zhaoqifeng
* @Date 2022/2/14 9:40
*/
List<ImportGeneralDTO> getImportInfo(ImportInfoFormDTO formDTO, List<ImportGeneralDTO> list);
}

49
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java

@ -1,6 +1,9 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -24,9 +27,15 @@ import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.BuildingResultPagedDTO;
import com.epmet.dto.result.IcNeighborHoodResultDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.entity.*;
import com.epmet.enums.BuildingTypeEnums;
import com.epmet.excel.IcBuildingExcel;
import com.epmet.model.BuildingInfoModel;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportBuildingInfoListener;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.*;
import com.epmet.service.BuildingService;
import com.epmet.service.IcBuildingService;
import com.epmet.service.IcBuildingUnitService;
@ -43,6 +52,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -75,6 +85,10 @@ public class BuildingServiceImpl implements BuildingService {
private CustomerStaffAgencyDao customerStaffAgencyDao;
@Resource
private IcBuildingUnitDao icBuildingUnitDao;
@Autowired
private IcHouseRedis icHouseRedis;
@Autowired
private IcNeighborHoodService neighborHoodService;
@Override
@Transactional(rollbackFor = Exception.class)
@ -178,7 +192,7 @@ public class BuildingServiceImpl implements BuildingService {
buildingTreeLevelDTO.setId(item.getId());
buildingTreeLevelDTO.setPId(item.getGridId());
buildingTreeLevelDTO.setLabel(item.getNeighborHoodName());
buildingTreeLevelDTO.setLevel("neighbourHood");
buildingTreeLevelDTO.setLevel("neighborHood");
buildingTreeLevelDTO.setLongitude(item.getLongitude());
buildingTreeLevelDTO.setLatitude(item.getLatitude());
buildingTreeLevelDTO.setChildren(new ArrayList<>());
@ -384,7 +398,38 @@ public class BuildingServiceImpl implements BuildingService {
*/
@Override
public Result buildingImportExcel(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException {
return null;
ExcelReader excelReader = null;
try {
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (IOException e) {
return new Result<String>().error("读取文件失败");
}
excelReader = EasyExcel.read(inputStream).build();
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
ReadSheet readSheet = EasyExcel.readSheet(0).head(BuildingInfoModel.class)
.registerReadListener(new ImportBuildingInfoListener(formDTO,icHouseRedis,icBuildingDao,neighborHoodService))
.build();
excelReader.read(readSheet);
} finally {
if (excelReader != null) {
excelReader.finish();
}
}
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));
}
private List<IcBuildingExcel> searchAllBuilding(ListIcNeighborHoodFormDTO formDTO) {

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());
}
/**
* 根据楼栋名获取楼栋信息
*
* @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());
}
/**
* 根据单元名获取单元信息
*
* @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);
}
}

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

@ -18,6 +18,9 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -37,19 +40,21 @@ import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.CustomerGridConstant;
import com.epmet.dao.CustomerGridDao;
import com.epmet.dao.IcBuildingDao;
import com.epmet.dao.IcNeighborHoodDao;
import com.epmet.dao.IcPropertyManagementDao;
import com.epmet.dto.IcNeighborHoodDTO;
import com.epmet.dto.NeighborHoodAndManagementDTO;
import com.epmet.dto.*;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.dto.result.InfoByNamesResultDTO;
import com.epmet.entity.IcNeighborHoodEntity;
import com.epmet.entity.IcNeighborHoodPropertyEntity;
import com.epmet.entity.IcPropertyManagementEntity;
import com.epmet.entity.*;
import com.epmet.excel.IcNeighborHoodExcel;
import com.epmet.service.IcNeighborHoodPropertyService;
import com.epmet.service.IcNeighborHoodService;
import com.epmet.service.IcPropertyManagementService;
import com.epmet.model.BuildingInfoModel;
import com.epmet.model.ImportBuildingInfoListener;
import com.epmet.model.ImportNeighborHoodInfoListener;
import com.epmet.model.NeighborHoodInfoModel;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.*;
import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -60,7 +65,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
@ -82,6 +89,14 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
private IcPropertyManagementService propertyManagementService;
@Autowired
private IcNeighborHoodPropertyService neighborHoodPropertyService;
@Resource
private IcBuildingService icBuildingService;
@Resource
private IcBuildingUnitService icBuildingUnitService;
@Autowired
private IcHouseRedis icHouseRedis;
@Autowired
private IcBuildingDao icBuildingDao;
@Override
public PageData<IcNeighborHoodDTO> page(Map<String, Object> params) {
@ -373,6 +388,41 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
return new Result().ok(str);
}
public Result importNeighbor(ImportInfoFormDTO formDTO, MultipartFile file){
ExcelReader excelReader = null;
try {
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (IOException e) {
return new Result<String>().error("读取文件失败");
}
excelReader = EasyExcel.read(inputStream).build();
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
ReadSheet readSheet = EasyExcel.readSheet(0).head(NeighborHoodInfoModel.class)
.registerReadListener(new ImportNeighborHoodInfoListener(formDTO,icHouseRedis,icBuildingDao,this))
.build();
excelReader.read(readSheet);
} finally {
if (excelReader != null) {
excelReader.finish();
}
}
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));
}
/**
* @Description 小区插入物业插入
* @param entities
@ -406,4 +456,142 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
});
}
/**
* 获取导入小区楼栋单元ID
*
* @param formDTO
* @param list
* @Param formDTO
* @Param list
* @Return {@link List< ImportGeneralDTO >}
* @Author zhaoqifeng
* @Date 2022/2/14 9:40
*/
@Override
public List<ImportGeneralDTO> getImportInfo(ImportInfoFormDTO formDTO, List<ImportGeneralDTO> 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, ImportGeneralDTO 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) {
info.setNeighborHoodExistStatus(true);
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, ImportGeneralDTO info) {
//根据小区ID和楼栋名获取楼栋信息
IcBuildingDTO building = icBuildingService.getBuildingInfo(info.getNeighborHoodId(), info.getBuildingName());
if (null != building) {
info.setBuildingExistStatus(true);
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, ImportGeneralDTO 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`;

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

@ -242,12 +242,12 @@
</select>
<!-- 查询组织下所有网格信息 -->
<select id="selectAllGridByOrgId" resultType="com.epmet.dto.ImportHouseGeneralDTO">
<select id="selectAllGridByOrgId" resultType="com.epmet.dto.ImportGeneralDTO">
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="selectAllNeighborHoodByGridIds" resultType="com.epmet.dto.ImportGeneralDTO">
SELECT
ID AS neighborHoodId,
NEIGHBOR_HOOD_NAME,
@ -262,7 +262,7 @@
</select>
<!-- 根据小区ID查询楼栋 -->
<select id="selectAllBuildingByNeighborHoodId" resultType="com.epmet.dto.ImportHouseGeneralDTO">
<select id="selectAllBuildingByNeighborHoodId" resultType="com.epmet.dto.ImportGeneralDTO">
SELECT
ID AS buildingId,
NEIGHBOR_HOOD_ID,
@ -273,7 +273,7 @@
</select>
<!-- 根据楼栋ID查询楼栋单元 -->
<select id="selectAllBuildingUnitByBuildingId" resultType="com.epmet.dto.ImportHouseGeneralDTO">
<select id="selectAllBuildingUnitByBuildingId" resultType="com.epmet.dto.ImportGeneralDTO">
SELECT
ID AS buildingUnitId,
UNIT_NUM AS buildingUnit,
@ -283,4 +283,47 @@
AND BUILDING_ID = #{building}
</select>
<!-- 根据ID查询小区 -->
<select id="selectNeighborHoodById" resultType="com.epmet.dto.ImportGeneralDTO">
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.ImportGeneralDTO">
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>

5
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java

@ -55,6 +55,11 @@ public class IcPartymemberStyleDTO implements Serializable {
*/
private String gridId;
/**
* 网格的所有上级
*/
private String gridPids;
private String gridName;
/**

23
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleShowListFormDTO.java

@ -0,0 +1,23 @@
package com.epmet.resi.partymember.dto.partymember.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
public class StyleShowListFormDTO implements Serializable {
public interface AddUserInternalGroup {
}
@NotBlank(message = "userId不能为空", groups = AddUserInternalGroup.class)
private String userId;
@NotBlank(message = "customerId不能为空", groups = AddUserInternalGroup.class)
private String customerId;
@NotNull(message = "pageNo不能为空", groups = AddUserInternalGroup.class)
private Integer pageNo;
@NotNull(message = "pageSize不能为空", groups = AddUserInternalGroup.class)
private Integer pageSize;
}

13
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java

@ -31,6 +31,7 @@ import com.epmet.modules.partymember.excel.IcPartymemberStyleExcel;
import com.epmet.modules.partymember.service.IcPartymemberStyleService;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import com.epmet.resi.partymember.dto.partymember.form.PartyMemberStyleFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -119,4 +120,16 @@ public class IcPartymemberStyleController {
return icPartymemberStyleService.importData(tokenDto, response, file);
}
/**
* 数据分析-党员风采列表查询
* @param tokenDto
* @return
*/
@PostMapping("showlist")
public Result<PageData<IcPartymemberStyleDTO>> showList(@LoginUser TokenDto tokenDto, @RequestBody StyleShowListFormDTO formDTO){
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
ValidatorUtils.validateEntity(formDTO,StyleShowListFormDTO.AddUserInternalGroup.class);
return new Result<PageData<IcPartymemberStyleDTO>>().ok(icPartymemberStyleService.showList(formDTO));
}
}

5
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java

@ -19,9 +19,12 @@ package com.epmet.modules.partymember.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.modules.partymember.entity.IcPartymemberStyleEntity;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 党员风采
*
@ -32,4 +35,6 @@ import org.apache.ibatis.annotations.Param;
public interface IcPartymemberStyleDao extends BaseDao<IcPartymemberStyleEntity> {
int clearCategry(@Param("categoryId") String categoryId, @Param("userId")String userId);
List<IcPartymemberStyleDTO> selectShowList(@Param("agencyId")String agencyId, @Param("customerId")String customerId);
}

5
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java

@ -50,6 +50,11 @@ public class IcPartymemberStyleEntity extends BaseEpmetEntity {
*/
private String gridId;
/**
* 网格的所有上级
*/
private String gridPids;
/**
* 党员姓名
*/

7
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java

@ -24,6 +24,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.modules.partymember.entity.IcPartymemberStyleEntity;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import com.epmet.resi.partymember.dto.partymember.form.PartyMemberStyleFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
@ -109,4 +110,10 @@ public interface IcPartymemberStyleService extends BaseService<IcPartymemberStyl
*/
Result importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file) throws IOException;
/**
* 数据分析-党员风采列表查询
* @param formDTO
* @return
*/
PageData<IcPartymemberStyleDTO> showList(StyleShowListFormDTO formDTO);
}

38
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java

@ -49,6 +49,7 @@ import com.epmet.modules.partymember.service.IcPartymemberStyleImageService;
import com.epmet.modules.partymember.service.IcPartymemberStyleService;
import com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO;
import com.epmet.resi.partymember.dto.partymember.form.PartyMemberStyleFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
@ -141,8 +142,11 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
public void save(TokenDto tokenDto, IcPartymemberStyleDTO dto) {
IcPartymemberStyleEntity entity = ConvertUtils.sourceToTarget(dto, IcPartymemberStyleEntity.class);
entity.setCustomerId(tokenDto.getCustomerId());
CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
entity.setAgencyId(staff.getAgencyId());
// CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
GridInfoCache gridInfoCache=CustomerOrgRedis.getGridInfo(dto.getGridId());
entity.setAgencyId(gridInfoCache.getPid());
entity.setGridPids(gridInfoCache.getPids());
if (StringUtils.isBlank(entity.getId())) {
insert(entity);
} else {
@ -284,6 +288,10 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
entity.setCustomerId(tokenDto.getCustomerId());
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setGridId(gridMap.get(item.getGridName()));
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(entity.getGridId());
if (null != gridInfo) {
entity.setGridPids(gridInfo.getPids());
}
entity.setName(item.getName());
entity.setMainDeed(item.getMainDeed());
IcPartymemberStyleCategoryDictEntity dictEntity=categoryDictMap.get(item.getCategoryName());
@ -306,4 +314,30 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
return new Result().ok(str);
}
/**
* 数据分析-党员风采列表查询
*
* @param formDTO
* @return
*/
@Override
public PageData<IcPartymemberStyleDTO> showList(StyleShowListFormDTO formDTO) {
CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId());
if (null == staff || StringUtils.isBlank(staff.getAgencyId())) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "查询当前工作人员缓存信息失败", "查询用户信息异常");
}
PageInfo<IcPartymemberStyleDTO> pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectShowList(staff.getAgencyId(), formDTO.getCustomerId()));
if (CollectionUtils.isNotEmpty(pageInfo.getList())) {
//赋值网格名称
for (IcPartymemberStyleDTO dto : pageInfo.getList()) {
dto.setImageList(icPartymemberStyleImageService.getByStyleId(dto.getId()));
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(dto.getGridId());
if (null != gridInfo) {
dto.setGridName(gridInfo.getGridName());
}
}
}
return new PageData<>(pageInfo.getList(), pageInfo.getTotal());
}
}

1
epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.3__style_gridpids.sql

@ -0,0 +1 @@
alter table ic_partymember_style add COLUMN GRID_PIDS VARCHAR(255) comment '网格的所有上级' after GRID_ID;

18
epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml

@ -25,4 +25,22 @@
and CATEGORY_ID=#{categoryId}
</update>
<select id="selectShowList" parameterType="map" resultType="com.epmet.resi.partymember.dto.partymember.IcPartymemberStyleDTO">
SELECT
s.id,
s.GRID_ID,
s.`NAME`,
s.MAIN_DEED,
s.CATEGORY_ID,
IFNULL( d.CATEGORY_NAME, '' ) AS CATEGORY_NAME
FROM
ic_partymember_style s
LEFT JOIN ic_partymember_style_category_dict d ON ( s.CATEGORY_ID = d.id )
WHERE
s.DEL_FLAG = '0'
AND s.CUSTOMER_ID = #{customerId}
AND s.grid_pids LIKE concat( '%', #{agencyId}, '%' )
ORDER BY
s.CREATED_TIME ASC
</select>
</mapper>

2
epmet-user/epmet-user-server/deploy/docker-compose-dev.yml

@ -9,7 +9,7 @@ services:
volumes:
- "/opt/epmet-cloud-logs/dev:/logs"
environment:
RUN_INSTRUCT: "java -Xms32m -Xmx512m -jar ./epmet-user.jar"
RUN_INSTRUCT: "java -Xms32m -Xmx1024m -jar ./epmet-user.jar"
restart: "unless-stopped"
deploy:
resources:

13
epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java

@ -14,6 +14,7 @@ import java.util.Map;
@Data
public class ResiImportCategoryData {
private String resiId;
private String agencyId;
private String gridId;
private String villageId;
@ -30,7 +31,8 @@ public class ResiImportCategoryData {
public ResiImportCategoryData() {
}
public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map<String, String> categories) {
public ResiImportCategoryData(String resiId, String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map<String, String> categories) {
this.resiId = resiId;
this.agencyId = agencyId;
this.gridId = gridId;
this.villageId = villageId;
@ -39,13 +41,4 @@ public class ResiImportCategoryData {
this.homeId = homeId;
this.categories = categories;
}
public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId) {
this.agencyId = agencyId;
this.gridId = gridId;
this.villageId = villageId;
this.buildId = buildId;
this.unitId = unitId;
this.homeId = homeId;
}
}

7
epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java

@ -11,11 +11,16 @@ import java.util.Map;
@Data
public class ResiImportResiCategoryChangedCache {
/**
* 导入的tag用来标记唯一一次导入操作
*/
private String importTag;
/**
* 新增居民
* Map<resiId:<ResiImportCategoryData>>
*/
private Map<String, ResiImportCategoryData> newResis = new HashMap<>();
// private Map<String, ResiImportCategoryData> newResis = new HashMap<>();
/**
* 调动的居民

10
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java → epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java

@ -17,7 +17,7 @@ import java.util.stream.Collectors;
* 创建一个监听器
*/
@Slf4j
public class DynamicEasyExcelListener extends AnalysisEventListener<Map<Integer, String>> {
public class IcResiImportDynamicExcelListener extends AnalysisEventListener<Map<Integer, String>> {
/**
* 一次性导入的条数
@ -89,10 +89,10 @@ public class DynamicEasyExcelListener extends AnalysisEventListener<Map<Integer,
// Map<Integer, String> dataList = new HashMap<>();
public DynamicEasyExcelListener(IcResiUserImportServiceImpl icResiUserImportService, String customerId,
String currentUserId, String currUserAgencyId,
String currUserAgencyPids, Boolean isPrimary, String tableName,
List<FormItemResult> formItemList, Integer headRowNumber) {
public IcResiImportDynamicExcelListener(IcResiUserImportServiceImpl icResiUserImportService, String customerId,
String currentUserId, String currUserAgencyId,
String currUserAgencyPids, Boolean isPrimary, String tableName,
List<FormItemResult> formItemList, Integer headRowNumber) {
this.customerId = customerId;
this.icResiUserImportService = icResiUserImportService;

119
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

@ -3,8 +3,10 @@ package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.epmet.bean.ResiImportCategoryData;
import com.epmet.bean.ResiImportResiCategoryChangedCache;
import com.epmet.bean.ResiImportChangedData;
@ -16,8 +18,11 @@ import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.IcResiUserDao;
import com.epmet.dao.IcUserChangeDetailedDao;
@ -31,7 +36,7 @@ import com.epmet.entity.IcUserChangeDetailedEntity;
import com.epmet.entity.IcUserChangeRecordEntity;
import com.epmet.entity.IcUserTransferRecordEntity;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.excel.handler.DynamicEasyExcelListener;
import com.epmet.excel.handler.IcResiImportDynamicExcelListener;
import com.epmet.feign.EpmetAdminOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
@ -118,6 +123,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
@Autowired
private UserService userService;
@Autowired
private RedisUtils redisUtils;
/**
* 字表中不需要的列
@ -253,12 +261,15 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
// 执行人员类别变更记录
Map<String, ResiImportCategoryData> newResis = newlyOrChangedResi.get().getNewResis();
// Map<String, ResiImportCategoryData> newResis = newlyOrChangedResi.get().getNewResis();
Map<String, ResiImportChangedData> categoryChangedResis = newlyOrChangedResi.get().getCategoryChangedResis();
Map<String, ResiImportChangedData> transferedResis = newlyOrChangedResi.get().getTransferedResis();
log.info("类别变动居民数:{}", categoryChangedResis.size());
log.info("调动居民数:{}", transferedResis.size());
//保存调动或者变更记录
saveNewResiCategoryRecord(newResis);
saveNewResiCategoryRecord();
saveResiCategoryChangedRecord(categoryChangedResis);
saveTransferedResiRecord(transferedResis);
@ -268,6 +279,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
log.error("【导入IC居民附加信息】下载导入结果信息失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
} finally {
// 清空rediskey
try {
String importTag = newlyOrChangedResi.get().getImportTag();
redisUtils.deleteByPattern(RedisKeys.icResiImportBaseKey(importTag).concat("*"));
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【导入IC居民附加信息】清空redis 类别缓存出错:{}", errorMsg);
}
// 清空线程变量
skipedRows.remove();
errorRows.remove();
newlyOrChangedResi.remove();
@ -280,6 +301,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* threadLocal初始化
*/
private void initImportThreadLocal(String customerId) {
// 生成importTag,用于标记唯一一次导入操作,导入完成之后,用来删除redis里面临时的key
String operatorId = loginUserUtil.getLoginUserId();
String importTag = operatorId + System.currentTimeMillis();
// 跳过的,不导入的行
Map<String, List<SkipedRow>> skipedRowsMap = new LinkedHashMap<>();
for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) {
@ -296,6 +321,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
// 居民类别信息
ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache();
c.setImportTag(importTag);
newlyOrChangedResi.set(c);
List<ResiCategoryItemResultDTO> resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId),
@ -323,7 +349,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private void importIcResiBaseInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId,
String tableName, String customerId) {
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(this, customerId, currentUserId, currUserAgencyId, currUserAgencyPids,
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, currUserAgencyPids,
true, tableName, formItemList, headRowNumber);
EasyExcel.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead();
}
@ -343,7 +369,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private void importIcResiExtraInfoFromExcel(List<FormItemResult> formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currentUserId,
String targetTableName, String customerId) {
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(this, customerId, currentUserId, currUserAgencyId, null,
IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, null,
false, targetTableName, formItemList, headRowNumber);
EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead();
}
@ -415,8 +441,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
} else {
// 新增居民
String resiId = IdWorker.getIdStr();
columnAndValues.put("CREATED_BY", currentUserId);
columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", ""));
columnAndValues.put("ID", resiId);
icResiUserDao.add(tableName, columnAndValues);
// 过滤出本居民含有哪些类别
@ -425,14 +453,26 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
.filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName)))
.collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k)));
newlyOrChangedResi.get().getNewResis().put(columnAndValues.get("ID"),
new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"),
columnAndValues.get("GRID_ID"),
columnAndValues.get("VILLAGE_ID"),
columnAndValues.get("BUILD_ID"),
columnAndValues.get("UNIT_ID"),
columnAndValues.get("HOME_ID"),
resiCategories));
// newlyOrChangedResi.get().getNewResis().put(resiId,
// new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"),
// columnAndValues.get("GRID_ID"),
// columnAndValues.get("VILLAGE_ID"),
// columnAndValues.get("BUILD_ID"),
// columnAndValues.get("UNIT_ID"),
// columnAndValues.get("HOME_ID"),
// resiCategories));
ResiImportCategoryData categoryData = new ResiImportCategoryData(resiId,
columnAndValues.get("AGENCY_ID"),
columnAndValues.get("GRID_ID"),
columnAndValues.get("VILLAGE_ID"),
columnAndValues.get("BUILD_ID"),
columnAndValues.get("UNIT_ID"),
columnAndValues.get("HOME_ID"),
resiCategories);
redisUtils.hMSet(RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", resiId), BeanUtil.beanToMap(categoryData));
categoryData = null;
}
} catch (Exception e) {
@ -1040,6 +1080,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("ID"),
existingResiMap.get("AGENCY_ID"),
existingResiMap.get("GRID_ID"),
existingResiMap.get("VILLAGE_ID"),
@ -1049,7 +1090,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
existingResiCategories);
ResiImportCategoryData newOne = new ResiImportCategoryData(
existingResiMap.get("AGENCY_ID"),
newResiMap.get("ID"),
newResiMap.get("AGENCY_ID"),
newResiMap.get("GRID_ID"),
newResiMap.get("VILLAGE_ID"),
newResiMap.get("BUILD_ID"),
@ -1100,6 +1142,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
ResiImportCategoryData oldOne = new ResiImportCategoryData(
existingResiMap.get("ID"),
existingResiMap.get("AGENCY_ID"),
existingResiMap.get("GRID_ID"),
existingResiMap.get("VILLAGE_ID"),
@ -1108,7 +1151,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
existingResiMap.get("HOME_ID"),
oldCategories);
ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"),
ResiImportCategoryData newOne = new ResiImportCategoryData(
newResiMap.get("ID"),
newResiMap.get("AGENCY_ID"),
newResiMap.get("GRID_ID"),
newResiMap.get("VILLAGE_ID"),
newResiMap.get("BUILD_ID"),
@ -1127,14 +1172,20 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map<String, String> resiInfoMap) {
ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get();
Map<String, ResiImportCategoryData> newResis = cc.getNewResis();
// Map<String, ResiImportCategoryData> newResis = cc.getNewResis();
Map<String, ResiImportChangedData> categoryChangedResis = cc.getCategoryChangedResis();
Map<String, ResiImportChangedData> transferedResis = cc.getTransferedResis();
ResiImportCategoryData newResi = newResis.get(icResiId);
if (newResi != null) {
// ResiImportCategoryData newResi = newResis.get(icResiId);
String userCateRedisKey = RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", icResiId);
Map < String, Object > addUserMap = redisUtils.hGetAll(userCateRedisKey);
if (addUserMap != null) {
//说明是新增居民
newResi.getCategories().put(columnName, "1");
ResiImportCategoryData newResiCateData = ConvertUtils.mapToEntity(addUserMap, ResiImportCategoryData.class);
newResiCateData.getCategories().put(columnName, "1");
redisUtils.hMSet(userCateRedisKey, BeanUtil.beanToMap(newResiCateData));
newResiCateData = null;
return;
}
@ -1286,35 +1337,39 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
/**
* 保存新增居民类别记录
* @param newResis
*/
public void saveNewResiCategoryRecord(Map<String, ResiImportCategoryData> newResis) {
public void saveNewResiCategoryRecord() {
Date now = new Date();
Set<String> newResiKeys = redisUtils.keys(RedisKeys.icResiImportTypeKey(newlyOrChangedResi.get().getImportTag(), "add").concat("*"));
CustomerStaffInfoCacheResult operator = CustomerStaffRedis.getStaffInfo(loginUserUtil.getLoginUserCustomerId(), loginUserUtil.getLoginUserId());
for (Map.Entry<String, ResiImportCategoryData> resi : newResis.entrySet()) {
String resiId = resi.getKey();
ResiImportCategoryData data = resi.getValue();
for (String resiKey : newResiKeys) {
Map<String, Object> newResiInfoMap = redisUtils.hGetAll(resiKey);
ResiImportCategoryData newResiInfoObj = ConvertUtils.mapToEntity(newResiInfoMap, ResiImportCategoryData.class);
IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId);
IcResiUserEntity resiInfo = icResiUserDao.selectById(newResiInfoObj.getResiId());
// 插入changeRecord
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfo.getName(), null,
IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), resiInfo.getName(), null,
loginUserUtil.getLoginUserId(), operator.getRealName(), "-", "-",
"add", "新增", "", now);
icUserChangeRecordDao.insert(changeRecord);
// 插入changeDetail
for (Map.Entry<String, String> column : data.getCategories().entrySet()) {
IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), resiId, changeRecord.getId(), data.getAgencyId(),
data.getGridId(), data.getVillageId(), data.getBuildId(), data.getUnitId(),
data.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids());
for (Map.Entry<String, String> column : newResiInfoObj.getCategories().entrySet()) {
IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), changeRecord.getId(), newResiInfoObj.getAgencyId(),
newResiInfoObj.getGridId(), newResiInfoObj.getVillageId(), newResiInfoObj.getBuildId(), newResiInfoObj.getUnitId(),
newResiInfoObj.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids());
icUserChangeDetailedDao.insert(changedetail);
changedetail = null;
}
}
changeRecord = null;
newResiInfoObj = null;
}
}
/**

25
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -18,7 +18,6 @@
package com.epmet.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
@ -710,11 +709,27 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
queryDTO.setFormCode(formCode);
//所有的子表
Result<List<SubTableJoinDTO>> subTablesRes=operCustomizeOpenFeignClient.querySubTables(queryDTO);
List<String> subTables=new ArrayList<>();
/*List<String> subTablesBak=new ArrayList<>();
if(subTablesRes.success()&&CollectionUtils.isNotEmpty(subTablesRes.getData())){
subTables =subTablesRes.getData().stream().map(SubTableJoinDTO::getJoinTableSql).collect(Collectors.toList());
}
return baseDao.dynamicQuery(customerId,resultTableName,conditions,subTables,currentStaffAgencyId,staffOrgPath);
subTablesBak =subTablesRes.getData().stream().map(SubTableJoinDTO::getJoinTableSql).collect(Collectors.toList());
}*/
List<SubTableJoinDTO> subTables =subTablesRes.getData();
// log.info("1、所有的子表subTables:"+JSON.toJSONString(subTables,true));
//关联哪些子表:查询条件用到的表名+查询的列对应的表 并集去重
Set<String> whereConditionTables=conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet());
Set<String> tables=new HashSet<>();
tables.addAll(whereConditionTables);
tables.add(resultTableName);
// log.info("2、查询条件+查询列对应的tables并集去重:"+ JSON.toJSONString(tables,true));
//最终关联的子表对应的sql:
List<String> finalSubTables =new ArrayList<>();
subTables.forEach(subTable->{
if(tables.contains(subTable.getTableName())){
finalSubTables.add(subTable.getJoinTableSql());
}
});
return baseDao.dynamicQuery(customerId,resultTableName,conditions,finalSubTables,currentStaffAgencyId,staffOrgPath);
}
/**

Loading…
Cancel
Save