Browse Source

Merge remote-tracking branch 'origin/dev_addcate_and_import' into dev

# Conflicts:
#	epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
master
zxc 4 years ago
parent
commit
c2027610a9
  1. 60
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 7
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java
  3. 7
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java
  4. 6
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java
  5. 150
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java
  6. 42
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/NeighborHoodAndManagementDTO.java
  7. 34
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/ImportInfoFormDTO.java
  8. 31
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ImportResultDTO.java
  9. 31
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/InfoByNamesResultDTO.java
  10. 6
      epmet-module/gov-org/gov-org-server/pom.xml
  11. 3
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/CustomerGridConstant.java
  12. 25
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
  13. 70
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  14. 38
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcNeighborHoodController.java
  15. 3
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java
  16. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerGridDao.java
  17. 89
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcBuildingDao.java
  18. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java
  19. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcPropertyManagementDao.java
  20. 6
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcNeighborHoodEntity.java
  21. 13
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcNeighborHoodExcel.java
  22. 38
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingInfoModel.java
  23. 52
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseInfoModel.java
  24. 325
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
  25. 450
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportHouseInfoListener.java
  26. 285
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportNeighborHoodInfoListener.java
  27. 32
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/NeighborHoodInfoModel.java
  28. 222
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/IcHouseRedis.java
  29. 14
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java
  30. 11
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingService.java
  31. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcBuildingUnitService.java
  32. 31
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcNeighborHoodService.java
  33. 70
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
  34. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingServiceImpl.java
  35. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcBuildingUnitServiceImpl.java
  36. 465
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
  37. 2
      epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.11__edit_neighbor_hood.sql
  38. 19
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerGridDao.xml
  39. 105
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
  40. 14
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml
  41. 25
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPropertyManagementDao.xml
  42. 99
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleCategoryDictDTO.java
  43. 11
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleDTO.java
  44. 36
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/AddStyleCategoryFormDTO.java
  45. 1
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/PartyMemberStyleFormDTO.java
  46. 15
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleCategoryCommonFormDTO.java
  47. 21
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleSelectListFormDTO.java
  48. 23
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleShowListFormDTO.java
  49. 30
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/UpdateStyleCategoryFormDTO.java
  50. 27
      epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/result/StyleCategoryDictResDTO.java
  51. 101
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleCategoryDictController.java
  52. 15
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java
  53. 20
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleCategoryDictDao.java
  54. 9
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleDao.java
  55. 66
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleCategoryDictEntity.java
  56. 8
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleEntity.java
  57. 3
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleExcel.java
  58. 12
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleImportExcel.java
  59. 57
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleCategoryDictService.java
  60. 7
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleService.java
  61. 183
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleCategoryDictServiceImpl.java
  62. 86
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleServiceImpl.java
  63. 23
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.2__style_dict.sql
  64. 1
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.3__style_gridpids.sql
  65. 18
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleCategoryDictDao.xml
  66. 24
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/mapper/partymember/IcPartymemberStyleDao.xml

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

@ -673,4 +673,64 @@ public class RedisKeys {
public static String icResiImportResiCategoryKey(String importTag, String type, String resiId) {
return icResiImportTypeKey(importTag, type).concat(":").concat(resiId);
}
/**
* @Description 临时房屋缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:38 上午
*/
public static String getTemporaryHouseInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryHouse:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时网格缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:38 上午
*/
public static String getTemporaryGridInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryGrid:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时小区缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:39 上午
*/
public static String getTemporaryNeighborHoodInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryNeighborHood:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时楼栋缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:39 上午
*/
public static String getTemporaryBuildingInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryBuilding:").concat(customerId).concat(":").concat(userId);
}
/**
* @Description 临时楼栋单元缓存key
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 1:54 下午
*/
public static String getTemporaryBuildingUnitInfoCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryBuildingUnit:").concat(customerId).concat(":").concat(userId);
}
public static String getTemporaryImportResultCacheKey(String customerId,String userId){
return rootPrefix.concat("temporary:").concat("temporaryResult:").concat(customerId).concat(":").concat(userId);
}
}

7
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java

@ -20,6 +20,7 @@ package com.epmet.controller;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
@ -27,10 +28,8 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.AddSocietyOrgFormDTO;
import com.epmet.dto.form.EditSocietyOrgFormDTO;
import com.epmet.dto.form.GetListPlaceOrgFormDTO;
import com.epmet.dto.form.GetListSocietyOrgFormDTO;
import com.epmet.dto.form.demand.ServiceQueryFormDTO;
import com.epmet.dto.result.GetListPlaceOrgResultDTO;
import com.epmet.dto.result.GetListSocietyOrgResultDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.excel.IcSocietyOrgExcel;
@ -164,9 +163,9 @@ public class IcSocietyOrgController {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);
}
}
}

7
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java

@ -24,6 +24,7 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
@ -267,7 +268,7 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
if (CollectionUtils.isEmpty(result)) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
return new Result().error(9999, "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "第" + subList + "行未成功!");
}
List<IcPartyActivityEntity> list = result.stream().map(item -> {
@ -296,7 +297,7 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);
}
@ -422,4 +423,4 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
formDTO.setEndTime(DateUtils.parse(end.concat(" 23:59:59"), DateUtils.DATE_TIME_PATTERN));
}
}
}

6
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java

@ -375,7 +375,7 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
if (CollectionUtils.isEmpty(result)) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
return new Result().error(9999, "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "第" + subList + "行未成功!");
}
List<IcPartyUnitEntity> list = result.stream().map(item -> {
@ -405,7 +405,7 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);
}
@ -493,4 +493,4 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
return StringUtils.join(list, StrConstant.COMMA);
}
}
}

150
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/ImportGeneralDTO.java

@ -0,0 +1,150 @@
package com.epmet.dto;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/2/13 4:32 下午
* @DESC
*/
@Data
public class ImportGeneralDTO implements Serializable {
private static final long serialVersionUID = -345610717773879687L;
/**
* 组织名ID
*/
private String agencyName;
private String agencyId;
/**
* agencyId的pid
*/
private String pid;
private String pids;
/**
* 网格名ID
*/
private String gridName;
private String gridId;
/**
* 小区名ID
*/
private String neighborHoodName;
private String neighborHoodId;
/**
* 所属楼栋ID
*/
private String buildingName;
private String buildingId;
/**
* 房屋类型
*/
private String type;
/**
* 单元数
*/
private Integer totalUnitNum = NumConstant.ONE;
/**
* 层数
*/
private Integer totalFloorNum;
/**
* 户数
*/
private Integer totalHouseNum;
/**
* 单元号ID
*/
private Integer buildingUnit;
private String buildingUnitId;
/**
* 门牌号
*/
private String doorName;
/**
* 房屋类型
*/
private String houseType;
/**
* 房屋用途
*/
private String purpose;
/**
* 是否出租
*/
private String rentFlagString;
private Integer rentFlag;
/**
* 姓名
*/
private String ownerName;
/**
* 电话
*/
private String ownerPhone;
/**
* 身份证
*/
private String ownerIdCard;
/**
* 行号
*/
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;
}

42
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/NeighborHoodAndManagementDTO.java

@ -0,0 +1,42 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/2/13 8:51 上午
* @DESC
*/
@Data
public class NeighborHoodAndManagementDTO implements Serializable {
private static final long serialVersionUID = -7500263771019585308L;
private String gridId;
/**
* 小区ID
*/
private String id;
private String gridName;
/**
* 小区名字
*/
private String neighborHoodName;
private String neighborHoodId;
/**
* 物业ID
*/
private String propertyId;
/**
* 物业名字
*/
private String propertyName;
}

34
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/ImportInfoFormDTO.java

@ -0,0 +1,34 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/2/12 10:38 上午
* @DESC
*/
@Data
public class ImportInfoFormDTO implements Serializable {
private static final long serialVersionUID = -3978921489168201769L;
public interface ImportInfoForm{}
/**
* 选中的组织ID
*/
@NotBlank(message = "orgId不能为空",groups = ImportInfoForm.class)
private String orgId;
/**
* 组织类型 agency:组织grid:网格neighborHood小区building楼栋
*/
@NotBlank(message = "orgType不能为空",groups = ImportInfoForm.class)
private String orgType;
private String customerId;
private String userId;
}

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

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

@ -0,0 +1,31 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/2/12 2:15 下午
* @DESC
*/
@Data
public class InfoByNamesResultDTO implements Serializable {
private static final long serialVersionUID = 264490056071606346L;
private String gridId;
private String agencyId;
private String gridName;
private String agencyName;
private String pid;
private String pids;
private String parentAgencyId;
private String agencyPids;
}

6
epmet-module/gov-org/gov-org-server/pom.xml

@ -125,6 +125,12 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

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

@ -16,4 +16,7 @@ public interface CustomerGridConstant {
String DEPT = "dept";
String GRID = "grid";
String NEIGHBORHOOD = "neighborHood";
String BUILDING = "building";
}

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

@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -31,6 +32,7 @@ import com.epmet.dao.IcBuildingUnitDao;
import com.epmet.dto.BuildingTreeLevelDTO;
import com.epmet.dto.form.IcBulidingFormDTO;
import com.epmet.dto.form.IcBulidingUnitFormDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.result.BuildingResultDTO;
import com.epmet.dto.result.BuildingResultPagedDTO;
@ -194,11 +196,32 @@ public class BuildingController {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str+"第"+subList+"行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str+"第"+subList+"行未成功!");
}
return new Result().ok(str);
}
/**
* @Description 楼宇导入
* @param tokenDTO
* @param file
* @param orgId
* @param orgType
* @author zxc
* @date 2022/2/13 10:18 上午
*/
@PostMapping("buildingimport")
public Result buildingImportExcel(@LoginUser TokenDto tokenDTO, @RequestParam("file") MultipartFile file,
@RequestParam("orgId")String orgId,
@RequestParam("orgType")String orgType) throws IOException{
ImportInfoFormDTO formDTO = new ImportInfoFormDTO();
formDTO.setCustomerId(tokenDTO.getCustomerId());
formDTO.setOrgType(orgType);
formDTO.setOrgId(orgId);
formDTO.setUserId(tokenDTO.getUserId());
return buildingService.buildingImportExcel(formDTO,file);
}
/**
* 查看楼宇单元列表
* @param tokenDTO

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

@ -19,6 +19,9 @@ package com.epmet.controller;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
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.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
@ -28,17 +31,21 @@ import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.IcHouseFormDTO;
import com.epmet.dto.form.IcNeighborHoodFormDTO;
import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
import com.epmet.dto.form.LoginUserDetailsFormDTO;
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;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.HouseService;
import com.epmet.service.IcHouseService;
import com.epmet.service.IcNeighborHoodService;
import com.epmet.util.ExcelPoiUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -49,6 +56,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
@ -69,6 +77,14 @@ public class HouseController implements ResultDataResolver {
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Autowired
private IcBuildingDao icBuildingDao;
@Autowired
private IcHouseRedis icHouseRedis;
@Autowired
private IcNeighborHoodService neighborHoodService;
@Autowired
private IcHouseService icHouseService;
@PostMapping("houselist")
@ -223,7 +239,7 @@ public class HouseController implements ResultDataResolver {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str+"第"+subList+"行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str+"第"+subList+"行未成功!");
}
return new Result().ok(str);
}
@ -232,4 +248,48 @@ public class HouseController implements ResultDataResolver {
Result<List<HouseInfoDTO>> queryListHouseInfo(@RequestBody Set<String> houseIds, @RequestParam("customerId") String customerId){
return new Result<List<HouseInfoDTO>>().ok(houseService.queryListHouseInfo(houseIds,customerId));
}
@PostMapping("houseimport")
public Result houseImport(@LoginUser TokenDto tokenDTO, @RequestParam("file") MultipartFile file,
@RequestParam("orgId")String orgId,
@RequestParam("orgType")String orgType){
ImportInfoFormDTO formDTO = new ImportInfoFormDTO();
formDTO.setCustomerId(tokenDTO.getCustomerId());
formDTO.setOrgType(orgType);
formDTO.setOrgId(orgId);
formDTO.setUserId(tokenDTO.getUserId());
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(HouseInfoModel.class)
.registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis,neighborHoodService,icHouseService))
.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));
}
}

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

@ -28,10 +28,13 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IcNeighborHoodDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.service.IcNeighborHoodService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -85,6 +88,18 @@ public class IcNeighborHoodController {
return new Result();
}
/**
* @Description 通过ID查询小区信息
* @Param ids
* @Return {@link Result< List< IcNeighborHoodDTO>>}
* @Author zhaoqifeng
* @Date 2021/11/8 10:46
*/
@PostMapping("getlistbyids")
public Result<List<IcNeighborHoodDTO>> getListByIds(@RequestBody List<String> ids) {
return new Result<List<IcNeighborHoodDTO>>().ok(icNeighborHoodService.getListByIds(ids));
}
/**
* @Description 获取网格下小区列表
* @Param dto
@ -98,15 +113,22 @@ public class IcNeighborHoodController {
}
/**
* @Description 通过ID查询小区信息
* @Param ids
* @Return {@link Result< List< IcNeighborHoodDTO>>}
* @Author zhaoqifeng
* @Date 2021/11/8 10:46
* @Description 小区信息导入
* @param tokenDTO
* @param file
* @author zxc
* @date 2022/2/12 10:47 上午
*/
@PostMapping("getlistbyids")
public Result<List<IcNeighborHoodDTO>> getListByIds(@RequestBody List<String> ids) {
return new Result<List<IcNeighborHoodDTO>>().ok(icNeighborHoodService.getListByIds(ids));
@PostMapping("neighborhoodimport")
public Result neighborhoodImport(@LoginUser TokenDto tokenDTO, @RequestParam("file") MultipartFile file,
@RequestParam("orgId")String orgId,
@RequestParam("orgType")String orgType) throws IOException {
ImportInfoFormDTO formDTO = new ImportInfoFormDTO();
formDTO.setCustomerId(tokenDTO.getCustomerId());
formDTO.setOrgType(orgType);
formDTO.setOrgId(orgId);
formDTO.setUserId(tokenDTO.getUserId());
return icNeighborHoodService.neighborhoodImport(formDTO,file);
}
}

3
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java

@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -223,7 +224,7 @@ public class NeighborHoodController {
Collections.sort(resultList);
String subList = resultList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
return new Result().ok(str);
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerGridDao.java

@ -365,4 +365,13 @@ public interface CustomerGridDao extends BaseDao<CustomerGridEntity> {
@Param("operateUserId") String operateUserId);
List<CustomerStaffGridResultDTO> getStaffGridList(@Param("customerId") String customerId, @Param("orgId") String orgId, @Param("orgType") String orgType);
/**
* @Description 根据网格名字查询网格信息
* @param names
* @author zxc
* @date 2022/2/12 2:06 下午
*/
List<InfoByNamesResultDTO> selectGridInfoByNames(@Param("names")List<String> names,@Param("customerId")String customerId);
}

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

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

10
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcNeighborHoodDao.java

@ -51,4 +51,14 @@ public interface IcNeighborHoodDao extends BaseDao<IcNeighborHoodEntity> {
Integer checkNameUq(@Param("customerId") String customerId,
@Param("neighborHoodName")String neighborHoodName,
@Param("neighborId")String neighborId);
/**
* @Description 根据小区名查询存在小区
* @param names
* @param customerId
* @author zxc
* @date 2022/2/12 2:59 下午
*/
List<String> selectNeighborhoodNameByNames(@Param("names")List<String> names,@Param("customerId") String customerId);
}

20
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcPropertyManagementDao.java

@ -20,6 +20,10 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.IcPropertyManagementEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 物业表
@ -31,4 +35,20 @@ import org.apache.ibatis.annotations.Mapper;
public interface IcPropertyManagementDao extends BaseDao<IcPropertyManagementEntity> {
IcPropertyManagementEntity selectByName(String name);
/**
* @Description 根据物业名查询已存在的物业名
* @param names
* @author zxc
* @date 2022/2/13 9:21 上午
*/
List<String> selectExistNames(@Param("names")List<String> names);
/**
* @Description 根据名字查ID
* @param names
* @author zxc
* @date 2022/2/13 9:59 上午
*/
List<IcPropertyManagementEntity> selectIdByName(@Param("names")List<String> names);
}

6
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcNeighborHoodEntity.java

@ -17,6 +17,7 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
@ -98,4 +99,9 @@ public class IcNeighborHoodEntity extends BaseEpmetEntity {
*/
private String location;
@TableField(exist = false)
private String gridName;
@TableField(exist = false)
private String propertyName;
}

13
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcNeighborHoodExcel.java

@ -21,6 +21,7 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.util.ExcelVerifyInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -121,4 +122,16 @@ public class IcNeighborHoodExcel extends ExcelVerifyInfo implements Serializable
@Length(max=500,message = "不能超过500个字")
private String remark;
@JsonIgnore
private Boolean status = false;
@JsonIgnore
private Boolean existNameStatus = false;
@JsonIgnore
private Boolean agencyNameStatus = false;
@JsonIgnore
private Boolean reStatus = false;
}

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

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

@ -0,0 +1,52 @@
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 HouseInfoModel {
@ExcelProperty(value = "所属组织")
private String agencyName;
@ExcelProperty(value = "所属网格")
private String gridName;
@ExcelProperty(value = "所属小区")
@Length(max=50,message = "不能超过50个字")
private String neighborHoodName;
@ExcelProperty(value = "所属楼栋")
private String buildingName;
@ExcelProperty(value = "单元号")
private Integer buildingUnit;
@ExcelProperty(value = "门牌号")
private String doorName;
@ExcelProperty(value = "房屋类型")
private String houseType;
@ExcelProperty(value = "房屋用途")
private String purpose;
@ExcelProperty(value = "出租")
private String rentFlagString;
@ExcelProperty(value = "房主姓名")
private String ownerName;
@ExcelProperty(value = "房主电话")
private String ownerPhone;
@ExcelProperty(value = "房主身份证")
private String ownerIdCard;
}

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

@ -0,0 +1,325 @@
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());
// 应产品要求添加
if (StringUtils.isNotBlank(dto.getType()) && (!dto.getType().equals("商品房") && !dto.getType().equals("自建房")) && !dto.getType().equals("别墅")){
nums.add(num);
return;
}
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(){
if (CollectionUtils.isEmpty(needDisposeList)){
return;
}
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())){
// 集合里重复的
if (r.getExistStatus()){
nums.add(r.getNum());
}
r.setExistStatus(true);
}
}
}
});
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().compareTo(gridName) != 0 || (!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));
}
}

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

@ -0,0 +1,450 @@
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.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.*;
import java.util.stream.Collectors;
/**
* @Author zxc
* @DateTime 2022/2/13 1:25 下午
* @DESC
*/
public class ImportHouseInfoListener extends AnalysisEventListener<HouseInfoModel> {
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;
Map<String, Object> buildingUnitInfos = 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,IcNeighborHoodService neighborHoodService, IcHouseService icHouseService){
this.formDTO = formDTO;
this.icBuildingDao = icBuildingDao;
this.icHouseRedis = icHouseRedis;
this.neighborHoodService = neighborHoodService;
this.icHouseService = icHouseService;
}
@Override
public void invoke(HouseInfoModel 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 (StringUtils.isNotBlank(dto.getHouseType()) ){
if( !"楼房".equals(dto.getHouseType()) && !dto.getHouseType().equals("平房") && !dto.getHouseType().equals("别墅") ){
nums.add(num);
return;
}
}
dto.setHouseType(HouseTypeEnums.getKeyByValue(dto.getHouseType()));
if (StringUtils.isNotBlank(dto.getPurpose()) && (!dto.getPurpose().equals("住宅") &&
!dto.getPurpose().equals("商业") &&
!dto.getPurpose().equals("办公") &&
!dto.getPurpose().equals("工业") &&
!dto.getPurpose().equals("仓储") &&
!dto.getPurpose().equals("商住混用") &&
!dto.getPurpose().equals("其他")) ){
nums.add(num);
return;
}
dto.setPurpose(HousePurposeEnums.getKeyByValue(dto.getPurpose()));
if (StringUtils.isNotBlank(dto.getRentFlagString()) && (!dto.getRentFlagString().equals("是") && !dto.getRentFlagString().equals("否"))){
nums.add(num);
return;
}
dto.setRentFlag(HouseRentFlagEnums.getCodeByName(dto.getRentFlagString()));
dto.setHouseName(dto.getBuildingName()+"-"+dto.getBuildingUnit()+"-"+dto.getDoorName());
if (formDTO.getOrgType().equals(CustomerGridConstant.BUILDING)){
disposeBuildingHouse(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.NEIGHBORHOOD)){
disposeNeighborHoodHouse(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.GRID)){
disposeGridHouse(dto);
}else if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
disposeAgencyHouse(dto);
}
// 数据筛选完毕,当num每满100条,处理一次
if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
finalDispose();
}
}
public void finalDispose(){
if (!CollectionUtils.isEmpty(needDisposeList)){
List<ImportGeneralDTO> importInfo = neighborHoodService.getImportInfo(formDTO, needDisposeList);
needInsertList.addAll(importInfo);
}
if (CollectionUtils.isEmpty(needInsertList)){
return;
}
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())){
// 集合里重复的
if (r.getExistStatus()){
nums.add(r.getNum());
}
r.setExistStatus(true);
}
}
}
});
// 根据单元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)){
// 库里存在的
if (n.getExistStatus()){
nums.add(n.getNum());
}
n.setExistStatus(true);
}
}
});
// 根据存在状态分组
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);
}
}
/**
* @Description 左侧树点击网格时调用
* @param dto
* @author zxc
* @date 2022/2/14 2:14 下午
*/
public void disposeGridHouse(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().compareTo(gridName) != 0 || (!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/14 1:35 下午
*/
public void disposeAgencyHouse(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);
}
}
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;
Object cacheBuilding = icHouseRedis.getTemporaryCacheBuilding(formDTO.getCustomerId(), formDTO.getUserId(), dto.getNeighborHoodId() + "_" + dto.getBuildingName());
dto.setBuildingId(null == cacheBuilding ? "" : cacheBuilding.toString());
if (StringUtils.isNotBlank(dto.getBuildingId())){
// 楼栋ID不为空赋值单元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);
}
}else {
needDisposeList.add(dto);
}
}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;
}
/**
* @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;
}
/**
* @Description 获取楼栋下的单元
* @param buildingId
* @author zxc
* @date 2022/2/14 2:04 下午
*/
public Map<String,Object> getBuildingUnitInfos(String buildingId){
buildingUnitInfoDTOs = icBuildingDao.selectAllBuildingUnitByBuildingId(buildingId);
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));
}
}
}

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

@ -0,0 +1,285 @@
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.dao.IcPropertyManagementDao;
import com.epmet.dto.ImportGeneralDTO;
import com.epmet.dto.NeighborHoodAndManagementDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
import com.epmet.dto.result.ImportResultDTO;
import com.epmet.entity.IcNeighborHoodPropertyEntity;
import com.epmet.entity.IcPropertyManagementEntity;
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 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;
private IcPropertyManagementDao propertyManagementDao;
public ImportNeighborHoodInfoListener(ImportInfoFormDTO formDTO, IcHouseRedis icHouseRedis,IcBuildingDao icBuildingDao,IcNeighborHoodService neighborHoodService, IcPropertyManagementDao propertyManagementDao){
this.formDTO = formDTO;
this.icHouseRedis = icHouseRedis;
this.icBuildingDao = icBuildingDao;
this.neighborHoodService = neighborHoodService;
this.propertyManagementDao = propertyManagementDao;
}
@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);
}
// 数据筛选完毕,当num每满100条,处理一次
if (num%NumConstant.ONE_HUNDRED == NumConstant.ZERO){
finalDispose();
}
}
public void finalDispose(){
if (CollectionUtils.isEmpty(needDisposeList)){
return;
}
Map<String, Long> groupByAllName = needDisposeList.stream().collect(Collectors.groupingBy(
n -> n.getAgencyName() + "_" + n.getGridName() + "_" + n.getNeighborHoodName(), 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())){
// 集合里重复的
if (r.getExistStatus()){
nums.add(r.getNum());
}
r.setExistStatus(true);
}
}
}
});
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::getNeighborHoodExistStatus));
List<ImportGeneralDTO> existList = groupByBuildingExistStatus.get(true);
if (!CollectionUtils.isEmpty(existList)){
existList.forEach(e -> {
nums.add(e.getNum());
});
}
List<ImportGeneralDTO> notExistList = groupByBuildingExistStatus.get(false);
if (!CollectionUtils.isEmpty(notExistList)){
// 物业表插入
List<String> propertyNames = notExistList.stream().filter(n -> StringUtils.isNotBlank(n.getPropertyName())).map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
List<String> disposePropertyNames = notExistList.stream().filter(n -> StringUtils.isNotBlank(n.getPropertyName())).map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
if (!CollectionUtils.isEmpty(propertyNames)){
List<String> existPropertyNames = propertyManagementDao.selectExistNames(propertyNames);
disposePropertyNames.removeAll(existPropertyNames);
List<IcPropertyManagementEntity> propertyManagementEntities = new ArrayList<>();
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(disposePropertyNames)){
disposePropertyNames.forEach(name -> {
IcPropertyManagementEntity e = new IcPropertyManagementEntity();
e.setName(name);
propertyManagementEntities.add(e);
});
}
neighborHoodService.insertPropertyManagement(propertyManagementEntities);
// 小区物业关系表插入
List<NeighborHoodAndManagementDTO> neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(notExistList, NeighborHoodAndManagementDTO.class);
List<IcPropertyManagementEntity> propertyManagementInfos = propertyManagementDao.selectIdByName(propertyNames);
neighborHoodAndManagementDTOS.forEach(n -> propertyManagementInfos.stream().filter(p -> p.getName().equals(n.getPropertyName()))
.forEach(p -> {
n.setPropertyId(p.getId());
n.setNeighborHoodId(n.getNeighborHoodId());
}));
List<IcNeighborHoodPropertyEntity> icNeighborHoodPropertyEntities = ConvertUtils.sourceToTarget(neighborHoodAndManagementDTOS, IcNeighborHoodPropertyEntity.class);
neighborHoodService.neighborHoodPropertyInsert(icNeighborHoodPropertyEntities);
}
}
}
// 清除
needDisposeList = new ArrayList<>();
needInsertList = new ArrayList<>();
gridName = null;
agencyName = null;
gridInfos = null;
gridInfoDTOs = null;
neighborHoodInfos = null;
neighborHoodInfoDTOs = null;
neighborHoodGeneralDTO = null;
}
/**
* @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().compareTo(gridName) != 0 || (!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) {
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));
}
}

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

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

@ -23,7 +23,9 @@ import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IcHouseDao;
import com.epmet.dto.result.HouseInfoDTO;
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;
@ -43,6 +45,9 @@ public class IcHouseRedis {
@Autowired
private IcHouseDao icHouseDao;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void delete(Object[] ids) {
}
@ -79,4 +84,221 @@ public class IcHouseRedis {
return houseInfo;
}
/**
* @Description 存放房屋临时缓存
* @param customerId
* @param map
* @param userId
* @author zxc
* @date 2022/2/14 9:04 上午
*/
public void setTemporaryCacheHouse(String customerId, Map<String,Object> map,String userId){
String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
redisUtils.hMSet(key,map);
}
/**
* @Description 获取房屋临时缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:28 上午
*/
public Object getTemporaryCacheHouse(String customerId,String userId,String buildingIdAndUnitIdAndHouseName){
String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, buildingIdAndUnitIdAndHouseName);
}
/**
* @Description 删除房屋临时缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 9:29 上午
*/
public void delTemporaryCacheHouses(String customerId,String userId){
String key = RedisKeys.getTemporaryHouseInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
/**
* @Description 保存网格临时缓存
* @param customerId
* @param map
* @param userId
* @author zxc
* @date 2022/2/14 1:49 下午
*/
public void setTemporaryCacheGrid(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map);
}
/**
* @Description 获取网格临时缓存单个
* @param customerId
* @param userId
* @param gridName
* @author zxc
* @date 2022/2/14 1:49 下午
*/
public Object getTemporaryCacheGrid(String customerId,String userId,String gridName){
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
Object o = redisUtils.hGet(key, gridName);
return o;
}
/**
* @Description 获取网格临时缓存多个
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 1:50 下午
*/
public Map<String,Object> getTemporaryCacheGrids(String customerId,String userId){
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
return redisUtils.hGetAll(key);
}
/**
* @Description 删除网格临时缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 1:50 下午
*/
public void delTemporaryCacheGrids(String customerId,String userId){
String key = RedisKeys.getTemporaryGridInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
/**
* @Description 保存临时小区缓存
* @param customerId
* @param map
* @param userId
* @author zxc
* @date 2022/2/14 1:50 下午
*/
public void setTemporaryCacheNeighBorHood(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map);
}
/**
* @Description 获取临时小区缓存单个
* @param customerId
* @param userId
* @param gridIdAndNeighborHoodName
* @author zxc
* @date 2022/2/14 1:50 下午
*/
public Object getTemporaryCacheNeighBorHood(String customerId,String userId,String gridIdAndNeighborHoodName){
String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, gridIdAndNeighborHoodName);
}
/**
* @Description 删除临时小区缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public void delTemporaryCacheNeighBorHood(String customerId,String userId){
String key = RedisKeys.getTemporaryNeighborHoodInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
/**
* @Description 保存临时楼栋缓存
* @param customerId
* @param map
* @param userId
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public void setTemporaryCacheBuilding(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map);
}
/**
* @Description 获取临时楼栋缓存单个
* @param customerId
* @param userId
* @param neighborHoodIdAndBuildingName
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public Object getTemporaryCacheBuilding(String customerId,String userId,String neighborHoodIdAndBuildingName){
String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, neighborHoodIdAndBuildingName);
}
/**
* @Description 删除临时楼栋缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public void delTemporaryCacheBuilding(String customerId,String userId){
String key = RedisKeys.getTemporaryBuildingInfoCacheKey(customerId,userId);
redisUtils.delete(key);
}
/**
* @Description 保存临时楼栋单元缓存
* @param customerId
* @param map
* @param userId
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public void setTemporaryCacheBuildingUnit(String customerId, Map<String,Object> map,String userId) {
String key = RedisKeys.getTemporaryBuildingUnitInfoCacheKey(customerId, userId);
redisUtils.hMSet(key, map);
}
/**
* @Description 获取临时楼栋单元缓存单个
* @param customerId
* @param userId
* @param buildingIdAndUnitName
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public Object getTemporaryCacheBuildingUnit(String customerId,String userId,String buildingIdAndUnitName){
String key = RedisKeys.getTemporaryBuildingUnitInfoCacheKey(customerId,userId);
return redisUtils.hGet(key, buildingIdAndUnitName);
}
/**
* @Description 删除临时楼栋单元缓存
* @param customerId
* @param userId
* @author zxc
* @date 2022/2/14 1:51 下午
*/
public void delTemporaryCacheBuildingUnit(String customerId,String userId){
String key = RedisKeys.getTemporaryBuildingUnitInfoCacheKey(customerId,userId);
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);
}
}

14
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java

@ -17,15 +17,19 @@
package com.epmet.service;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.BuildingTreeLevelDTO;
import com.epmet.dto.form.IcBulidingFormDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
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.excel.IcBuildingExcel;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
@ -62,4 +66,14 @@ public interface BuildingService {
List<BuildingResultDTO> buildingListByIds(List<String> buildingIdList);
BuildingResultPagedDTO buildinglistbyidsPage(List<String> buildingIdList, Integer pageNo, Integer pageSize);
/**
* @Description 楼宇导入
* @param formDTO
* @param file
* @author zxc
* @date 2022/2/13 10:18 上午
*/
Result buildingImportExcel(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException;
}

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

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

@ -20,9 +20,16 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
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 com.epmet.entity.IcNeighborHoodPropertyEntity;
import com.epmet.entity.IcPropertyManagementEntity;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -112,4 +119,28 @@ public interface IcNeighborHoodService extends BaseService<IcNeighborHoodEntity>
* @Date 2021/11/8 10:45
*/
List<IcNeighborHoodDTO> getListByIds(List<String> ids);
/**
* @Description 小区信息导入
* @param formDTO
* @param file
* @author zxc
* @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);
void insertPropertyManagement(List<IcPropertyManagementEntity> propertyManagementEntities);
void neighborHoodPropertyInsert(List<IcNeighborHoodPropertyEntity> entities);
}

70
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;
@ -13,18 +16,26 @@ import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dao.*;
import com.epmet.dto.BuildingTreeLevelDTO;
import com.epmet.dto.CustomerStaffAgencyDTO;
import com.epmet.dto.IcBuildingDTO;
import com.epmet.dto.form.IcBulidingFormDTO;
import com.epmet.dto.form.ImportInfoFormDTO;
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;
@ -36,9 +47,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
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;
@ -71,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)
@ -174,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<>());
@ -325,7 +343,7 @@ public class BuildingServiceImpl implements BuildingService {
icBuildingUnitService.insertBatch(icBuildingUnitEntityList);
/* if(!"".equals(str)){
return new Result().error(9999, str.append("不存在").toString());
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str.append("不存在").toString());
}*/
return numList;
}
@ -366,6 +384,54 @@ public class BuildingServiceImpl implements BuildingService {
return result;
}
/**
* @Description 楼宇导入
* 根据左侧树选中的层级可导入对应数据
* 1. 选中社区可导入该社区下所有小区信息楼宇信息房屋信息没有匹配的小区楼宇均新增网格没有对应的不新增
* 2. 选中网格可导入该网格下所有小区信息楼宇信息房屋信息没有匹配的小区楼宇均新增
* 3. 选中小区可导入该小区下所有楼宇信息房屋信息没有匹配的楼宇均新增
* 4. 选中楼宇可导入该楼宇下所有房屋信息
* @param formDTO
* @param file
* @author zxc
* @date 2022/2/13 10:15 上午
*/
@Override
public Result buildingImportExcel(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException {
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) {
// QueryWrapper<IcNeighborHoodEntity> neighborHoodEntityQueryWrapper = new QueryWrapper<>();

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

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

@ -17,30 +17,56 @@
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;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
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.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.dto.IcNeighborHoodDTO;
import com.epmet.entity.IcNeighborHoodEntity;
import com.epmet.service.IcNeighborHoodService;
import com.epmet.dao.IcPropertyManagementDao;
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.*;
import com.epmet.excel.IcNeighborHoodExcel;
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;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -53,6 +79,22 @@ import java.util.stream.Collectors;
@Service
public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao, IcNeighborHoodEntity> implements IcNeighborHoodService {
@Autowired
private CustomerGridDao customerGridDao;
@Autowired
private IcPropertyManagementDao propertyManagementDao;
@Autowired
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) {
@ -160,4 +202,411 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao
return ConvertUtils.sourceToTarget(list, IcNeighborHoodDTO.class);
}
}
/**
* @Description 小区信息导入
* @param formDTO
* @param file
* @author zxc
* @date 2022/2/12 11:11 上午
*/
@Override
public Result neighborhoodImport(ImportInfoFormDTO formDTO, MultipartFile file) throws IOException {
/*ExcelImportResult<IcNeighborHoodExcel> importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcNeighborHoodExcel.class);
List<IcNeighborHoodExcel> failList = importResult.getFailList();
//存放错误数据行号
List<Integer> numList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(failList)){
for ( IcNeighborHoodExcel entity : failList) {
//打印失败的行 和失败的信息
log.error("第{}行,{}",entity.getRowNum(),entity.getErrorMsg());
numList.add(entity.getRowNum());
}
}
List<IcNeighborHoodExcel> result =importResult.getList();
return disposeImportNeighborhood(formDTO,result);*/
return importNeighbor(formDTO,file);
}
/**
* @Description 根据左侧树选中的层级可导入对应数据
* 1. 选中社区可导入该社区下所有小区信息楼宇信息房屋信息没有匹配的小区楼宇均新增网格没有对应的不新增
* 2. 选中网格可导入该网格下所有小区信息楼宇信息房屋信息没有匹配的小区楼宇均新增
* 3. 选中小区可导入该小区下所有楼宇信息房屋信息没有匹配的楼宇均新增
* 4. 选中楼宇可导入该楼宇下所有房屋信息
* @param formDTO
* @param result
* @author zxc
* @date 2022/2/12 2:02 下午
*/
public Result disposeImportNeighborhood(ImportInfoFormDTO formDTO, List<IcNeighborHoodExcel> result){
if (CollectionUtils.isEmpty(result)){
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"excel表格内没有数据");
}
List<Integer> nums = new ArrayList<>();
List<String> gridNames = result.stream().map(IcNeighborHoodExcel::getGridName).distinct().collect(Collectors.toList());
// 1. 查询数据网格是否存在
List<InfoByNamesResultDTO> gridInfos = customerGridDao.selectGridInfoByNames(gridNames, formDTO.getCustomerId());
if (CollectionUtils.isEmpty(gridInfos)){
// 网格没有对应的不新增
for (int i = NumConstant.ONE; i <= result.size(); i++) {
nums.add(i);
}
String str = String.format("共%s条,成功导入%s条。",result.size(),0);
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
}
result.forEach(r -> {
for (InfoByNamesResultDTO g : gridInfos) {
if (r.getGridName().equals(g.getGridName())){
// 能查询出网格,变为true
r.setStatus(true);
break;
}
}
});
Map<Boolean, List<IcNeighborHoodExcel>> groupStatus = result.stream().collect(Collectors.groupingBy(IcNeighborHoodExcel::getStatus));
// 只获取能查询到的网格
List<IcNeighborHoodExcel> neighborHoods = groupStatus.get(true);
// 2. 查询组织选中组织下存在的小区
List<String> existNames = baseDao.selectNeighborhoodNameByNames(neighborHoods.stream().map(IcNeighborHoodExcel::getNeighborHoodName).distinct().collect(Collectors.toList()), formDTO.getCustomerId());
// 为了显示多少行插入成功,未成功
result.forEach(r -> {
for (String s : existNames) {
if (r.getNeighborHoodName().equals(s)){
// 数据库已存在此小区名变为true
r.setExistNameStatus(true);
break;
}
}
});
Map<Boolean, List<IcNeighborHoodExcel>> groupByExistName = neighborHoods.stream().collect(Collectors.groupingBy(IcNeighborHoodExcel::getExistNameStatus));
// 获取需要插入的数据
List<IcNeighborHoodExcel> needInsert = groupByExistName.get(false);
if (CollectionUtils.isEmpty(needInsert)){
for (int i = NumConstant.ONE; i <= result.size(); i++) {
nums.add(i);
}
String str = String.format("共%s条,成功导入%s条。",result.size(),0);
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
}
if (formDTO.getOrgType().equals(CustomerGridConstant.AGENCY)){
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getOrgId());
if (null == agencyInfo){
throw new EpmetException("未查询到组织信息...");
}
needInsert.forEach(n -> {
if (agencyInfo.getOrganizationName().equals(n.getAgencyName())){
// 所属组织名一样变为true
n.setAgencyNameStatus(true);
}
});
}else {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("未查询到网格信息...");
}
needInsert.forEach(n -> {
if (gridInfo.getGridName().equals(n.getGridName())){
//网格名一样变为true
n.setAgencyNameStatus(true);
}
});
}
Map<Boolean, List<IcNeighborHoodExcel>> groupByAgencyNameStatus = needInsert.stream().collect(Collectors.groupingBy(IcNeighborHoodExcel::getAgencyNameStatus));
List<IcNeighborHoodExcel> finalNeedInsert = groupByAgencyNameStatus.get(true);
if (CollectionUtils.isEmpty(finalNeedInsert)){
for (int i = NumConstant.ONE; i <= result.size(); i++) {
nums.add(i);
}
String str = String.format("共%s条,成功导入%s条。",result.size(),0);
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str +"第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
}
Map<String, Long> collect = finalNeedInsert.stream().collect(Collectors.groupingBy(o -> o.getGridName() + "_" + o.getNeighborHoodName(), Collectors.counting()));
collect.forEach((k,v) -> {
if (Integer.valueOf(v.toString()).compareTo(1) > 0){
for (IcNeighborHoodExcel r : result) {
if (k.equals(r.getGridName()+"_"+r.getNeighborHoodName())){
r.setReStatus(true);
}
}
}
});
List<IcNeighborHoodExcel> realFinalResult = new ArrayList<>();
for (int i = NumConstant.ZERO; i < result.size(); i++) {
if (result.get(i).getStatus() == true && result.get(i).getExistNameStatus() == false &&
result.get(i).getAgencyNameStatus() == true && result.get(i).getReStatus() == false){
realFinalResult.add(result.get(i));
}
}
List<IcNeighborHoodEntity> entities = ConvertUtils.sourceToTarget(realFinalResult, IcNeighborHoodEntity.class);
entities.forEach(e -> {
for (InfoByNamesResultDTO g : gridInfos) {
if (e.getGridName().equals(g.getGridName())){
e.setAgencyId(g.getAgencyId());
e.setAgencyPids(g.getAgencyPids());
e.setCustomerId(formDTO.getCustomerId());
e.setGridId(g.getGridId());
e.setParentAgencyId(g.getParentAgencyId());
break;
}
}
});
// 物业表插入
List<String> propertyNames = finalNeedInsert.stream().map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
List<String> disposePropertyNames = finalNeedInsert.stream().map(m -> m.getPropertyName()).distinct().collect(Collectors.toList());
List<String> existPropertyNames = propertyManagementDao.selectExistNames(propertyNames);
disposePropertyNames.removeAll(existPropertyNames);
List<IcPropertyManagementEntity> propertyManagementEntities = new ArrayList<>();
if (CollectionUtils.isNotEmpty(disposePropertyNames)){
disposePropertyNames.forEach(name -> {
IcPropertyManagementEntity e = new IcPropertyManagementEntity();
e.setName(name);
propertyManagementEntities.add(e);
});
}
importInsert(entities,propertyManagementEntities);
// 小区物业关系表插入
List<NeighborHoodAndManagementDTO> neighborHoodAndManagementDTOS = ConvertUtils.sourceToTarget(entities, NeighborHoodAndManagementDTO.class);
List<IcPropertyManagementEntity> propertyManagementInfos = propertyManagementDao.selectIdByName(propertyNames);
neighborHoodAndManagementDTOS.forEach(n -> propertyManagementInfos.stream().filter(p -> p.getName().equals(n.getPropertyName()))
.forEach(p -> {
n.setPropertyId(p.getId());
n.setNeighborHoodId(n.getId());
}));
List<IcNeighborHoodPropertyEntity> icNeighborHoodPropertyEntities = ConvertUtils.sourceToTarget(neighborHoodAndManagementDTOS, IcNeighborHoodPropertyEntity.class);
neighborHoodPropertyInsert(icNeighborHoodPropertyEntities);
for (int i = NumConstant.ZERO; i < result.size(); i++) {
if (result.get(i).getStatus() == false || result.get(i).getExistNameStatus() == true || result.get(i).getAgencyNameStatus() == false || result.get(i).getReStatus() == true){
nums.add(i + NumConstant.ONE);
}
}
String str = String.format("共%s条,成功导入%s条。",result.size(),entities.size());
if (CollectionUtils.isNotEmpty(nums)){
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),str + "第"+nums.stream().map(String::valueOf).collect(Collectors.joining("、"))+"行未成功!");
}
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,propertyManagementDao))
.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
* @param propertyManagementEntities
* @author zxc
* @date 2022/2/13 10:09 上午
*/
@Transactional(rollbackFor = Exception.class)
public void importInsert(List<IcNeighborHoodEntity> entities,List<IcPropertyManagementEntity> propertyManagementEntities){
List<List<IcNeighborHoodEntity>> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
insertBatch(p);
});
List<List<IcPropertyManagementEntity>> partition1 = ListUtils.partition(propertyManagementEntities, NumConstant.ONE_HUNDRED);
partition1.forEach(p -> {
propertyManagementService.insertBatch(p);
});
}
@Override
@Transactional(rollbackFor = Exception.class)
public void insertPropertyManagement(List<IcPropertyManagementEntity> propertyManagementEntities){
if (CollectionUtils.isEmpty(propertyManagementEntities)){
return;
}
List<List<IcPropertyManagementEntity>> partition1 = ListUtils.partition(propertyManagementEntities, NumConstant.ONE_HUNDRED);
partition1.forEach(p -> {
propertyManagementService.insertBatch(p);
});
}
/**
* @Description 小区物业关系表插入
* @param entities
* @author zxc
* @date 2022/2/13 10:09 上午
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void neighborHoodPropertyInsert(List<IcNeighborHoodPropertyEntity> entities){
List<List<IcNeighborHoodPropertyEntity>> partition = ListUtils.partition(entities, NumConstant.ONE_HUNDRED);
partition.forEach(p -> {
neighborHoodPropertyService.insertBatch(p);
});
}
/**
* 获取导入小区楼栋单元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()) && StringUtils.isNotEmpty(item.getBuildingName())) {
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
*/
@Transactional(rollbackFor = Exception.class)
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());
entity.setAddress(info.getAddress());
entity.setRemark(info.getRemark());
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`;

19
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerGridDao.xml

@ -806,4 +806,23 @@
</if>
</select>
<!-- 根据网格名字查询网格信息 -->
<select id="selectGridInfoByNames" resultType="com.epmet.dto.result.InfoByNamesResultDTO">
SELECT
g.ID AS gridId,
g.GRID_NAME AS gridName,
a.ID AS agencyId,
a.PID AS parentAgencyId,
a.PIDS AS agencyPids
FROM customer_grid g
INNER JOIN customer_agency a ON (a.ID = g.PID AND a.DEL_FLAG = '0')
WHERE g.DEL_FLAG = 0
AND g.CUSTOMER_ID = #{customerId}
AND g.GRID_NAME IN (
<foreach collection="names" item="n" separator=",">
#{n}
</foreach>
)
</select>
</mapper>

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

@ -221,4 +221,109 @@
order by gridName,neighborHoodName,buildingName
</select>
<!-- 根据ID查询楼栋名 -->
<select id="selectBuildingNameById" resultType="java.lang.String">
SELECT BUILDING_NAME FROM ic_building WHERE DEL_FLAG = '0' AND ID = #{orgId}
</select>
<!-- 根据ID查询小区名 -->
<select id="selectNeighborHoodNameById" resultType="java.lang.String">
SELECT NEIGHBOR_HOOD_NAME FROM ic_neighbor_hood WHERE del_flag = '0' AND id = #{orgId}
</select>
<!-- 根据ID查询网格名 -->
<select id="selectGridNameById" resultType="java.lang.String">
SELECT grid_name FROM customer_grid WHERE DEL_FLAG = '0' AND ID = #{orgId}
</select>
<!-- 根据ID查询组织名 -->
<select id="selectAgencyNameById" resultType="java.lang.String">
SELECT ORGANIZATION_NAME FROM customer_agency WHERE DEL_FLAG = '0' AND ID = #{orgId}
</select>
<!-- 查询组织下所有网格信息 -->
<select id="selectAllGridByOrgId" resultType="com.epmet.dto.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.ImportGeneralDTO">
SELECT
ID AS neighborHoodId,
NEIGHBOR_HOOD_NAME,
GRID_ID
FROM ic_neighbor_hood
WHERE DEL_FLAG = '0'
AND GRID_ID IN (
<foreach collection="orgIds" item="o" separator=",">
#{o}
</foreach>
)
</select>
<!-- 根据小区ID查询楼栋 -->
<select id="selectAllBuildingByNeighborHoodId" resultType="com.epmet.dto.ImportGeneralDTO">
SELECT
ID AS buildingId,
NEIGHBOR_HOOD_ID,
BUILDING_NAME
FROM ic_building
WHERE DEL_FLAG = '0'
AND NEIGHBOR_HOOD_ID = #{neighborHoodId}
</select>
<!-- 根据楼栋ID查询楼栋单元 -->
<select id="selectAllBuildingUnitByBuildingId" resultType="com.epmet.dto.ImportGeneralDTO">
SELECT
ID AS buildingUnitId,
UNIT_NUM AS buildingUnit,
BUILDING_ID
FROM ic_building_unit
WHERE DEL_FLAG = '0'
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>

14
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml

@ -214,4 +214,18 @@
and a.id !=#{neighborId}
</if>
</select>
<!-- 根据小区名查询存在小区 -->
<select id="selectNeighborhoodNameByNames" resultType="java.lang.String">
SELECT
NEIGHBOR_HOOD_NAME
FROM ic_neighbor_hood
WHERE DEL_FLAG = '0'
AND CUSTOMER_ID = #{customerId}
AND NEIGHBOR_HOOD_NAME IN (
<foreach collection="names" item="n" separator=",">
#{n}
</foreach>
)
</select>
</mapper>

25
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPropertyManagementDao.xml

@ -23,4 +23,29 @@
m.DEL_FLAG = '0'
AND m.`NAME` = #{name}
</select>
<!-- 根据物业名查询已存在的物业名 -->
<select id="selectExistNames" resultType="java.lang.String">
SELECT `NAME` FROM ic_property_management
WHERE
DEL_FLAG = '0'
AND `NAME` IN (
<foreach collection="names" item="n" separator=",">
#{n}
</foreach>
)
</select>
<!-- 根据名字查ID -->
<select id="selectIdByName" resultType="com.epmet.entity.IcPropertyManagementEntity">
SELECT ID,`NAME` FROM ic_property_management
WHERE
DEL_FLAG = '0'
AND `NAME` IN (
<foreach collection="names" item="n" separator=",">
#{n}
</foreach>
)
</select>
</mapper>

99
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/IcPartymemberStyleCategoryDictDTO.java

@ -0,0 +1,99 @@
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 党员风采分类字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-02-12
*/
@Data
public class IcPartymemberStyleCategoryDictDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 楼栋主键
*/
private String id;
/**
* 客户id
*/
private String customerId;
/**
* 上级分类ID 顶级此列存储0
*/
private String pid;
/**
* 所有上级分类ID英文顿号隔开顶级此列存储0
*/
private String pids;
/**
* 分类编码分类编码+customer_id唯一;从1000开始
*/
private String categoryCode;
/**
* 上级分类编码
*/
private String parentCategoryCode;
/**
* 分类名称
*/
private String categoryName;
/**
* 分类级别1,2,3,4.... 目前只有一级
*/
private Integer level;
/**
* 排序
*/
private Integer sort;
/**
* 0:可用1被禁用默认0
*/
private Boolean beDisabled;
/**
* 删除标识 0未删除1已删除
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

11
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;
/**
@ -98,5 +103,9 @@ public class IcPartymemberStyleDTO implements Serializable {
private Date updatedTime;
private List<String> imageList;
/**
* 分类名称
*/
private String categoryName;
private String categoryId;
}

36
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/AddStyleCategoryFormDTO.java

@ -0,0 +1,36 @@
package com.epmet.resi.partymember.dto.partymember.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 党员风采分类添加或修改分类
*/
@Data
public class AddStyleCategoryFormDTO implements Serializable {
public interface AddUserInternalGroup {
}
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "customerId不能为空", groups = AddUserInternalGroup.class)
private String customerId;
/**
* 分类名称
*/
@NotBlank(message = "分类名称不能为空", groups = AddUserShowGroup.class)
@Length(max = 10, groups = AddUserShowGroup.class)
private String categoryName;
/**
* 主键
*/
private String categoryId;
}

1
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/PartyMemberStyleFormDTO.java

@ -22,4 +22,5 @@ public class PartyMemberStyleFormDTO implements Serializable {
private String mainDeed;
private Integer pageNo;
private Integer pageSize;
private String categoryId;
}

15
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleCategoryCommonFormDTO.java

@ -0,0 +1,15 @@
package com.epmet.resi.partymember.dto.partymember.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
public class StyleCategoryCommonFormDTO implements Serializable {
private static final long serialVersionUID = -291713921309878763L;
public interface AddUserInternalGroup {}
@NotBlank(message = "customerId不能为空",groups = AddUserInternalGroup.class)
private String customerId;
}

21
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/StyleSelectListFormDTO.java

@ -0,0 +1,21 @@
package com.epmet.resi.partymember.dto.partymember.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
public class StyleSelectListFormDTO implements Serializable {
public interface AddUserInternalGroup {}
@NotBlank(message = "customerId不能为空",groups = AddUserInternalGroup.class)
private String customerId;
/**
* query:查询条件用新增或者编辑addorupdate
*/
@NotBlank(message = "type不能为空",groups = AddUserInternalGroup.class)
private String type;
}

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

30
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/form/UpdateStyleCategoryFormDTO.java

@ -0,0 +1,30 @@
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 UpdateStyleCategoryFormDTO implements Serializable {
public interface DeleteInternalGroup {
}
public interface UpdateStatusInternalGroup {
}
/**
* 主键
*/
@NotBlank(message = "categoryId不能为空", groups = {DeleteInternalGroup.class,UpdateStatusInternalGroup.class})
private String categoryId;
/**
* 0:可用1被禁用默认0
*/
@NotNull(message = "beDisabled不能为空", groups = {UpdateStatusInternalGroup.class})
private Boolean beDisabled;
private String userId;
}

27
epmet-module/resi-partymember/resi-partymember-client/src/main/java/com/epmet/resi/partymember/dto/partymember/result/StyleCategoryDictResDTO.java

@ -0,0 +1,27 @@
package com.epmet.resi.partymember.dto.partymember.result;
import lombok.Data;
import java.io.Serializable;
/**
* 党员风采分类列表查询
*/
@Data
public class StyleCategoryDictResDTO implements Serializable {
/**
* 主键
*/
private String categoryId;
/**
* 分类名称
*/
private String categoryName;
/**
* 0:可用1被禁用默认0
*/
private Boolean beDisabled;
}

101
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleCategoryDictController.java

@ -0,0 +1,101 @@
package com.epmet.modules.partymember.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.modules.partymember.service.IcPartymemberStyleCategoryDictService;
import com.epmet.resi.partymember.dto.partymember.form.AddStyleCategoryFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleCategoryCommonFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleSelectListFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.UpdateStyleCategoryFormDTO;
import com.epmet.resi.partymember.dto.partymember.result.StyleCategoryDictResDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 党员风采分类字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-02-12
*/
@RestController
@RequestMapping("stylecategorydict")
public class IcPartymemberStyleCategoryDictController {
@Autowired
private IcPartymemberStyleCategoryDictService icPartymemberStyleCategoryDictService;
/**
* 党员风采分类列表查询
* @param formDTO
* @return
*/
@PostMapping("list")
public Result<List<StyleCategoryDictResDTO>> list(@RequestBody StyleCategoryCommonFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO,StyleCategoryCommonFormDTO.AddUserInternalGroup.class);
return new Result<List<StyleCategoryDictResDTO>>().ok(icPartymemberStyleCategoryDictService.queryList(formDTO.getCustomerId()));
}
/**
* 党员风采分类添加或修改分类
* @param formDTO
* @return
*/
@PostMapping("addorupdate")
public Result addOrUpdate(@RequestBody AddStyleCategoryFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, AddStyleCategoryFormDTO.AddUserInternalGroup.class,AddStyleCategoryFormDTO.AddUserShowGroup.class);
icPartymemberStyleCategoryDictService.addOrUpdate(formDTO);
return new Result();
}
/**
* 党员风采分类删除分类删除的分类如果已经使用过清空已经使用的记录修改时需要重新选择
* @param formDTO
* @return
*/
@PostMapping("delete")
public Result delete(@LoginUser TokenDto tokenDto, @RequestBody UpdateStyleCategoryFormDTO formDTO){
formDTO.setUserId(tokenDto.getUserId());
ValidatorUtils.validateEntity(formDTO,UpdateStyleCategoryFormDTO.DeleteInternalGroup.class);
icPartymemberStyleCategoryDictService.delete(formDTO);
return new Result();
}
/**
* 党员风采分类启用或禁用
* @param tokenDto
* @param formDTO
* @return
*/
@PostMapping("updatestatus")
public Result updateStatus(@LoginUser TokenDto tokenDto, @RequestBody UpdateStyleCategoryFormDTO formDTO){
formDTO.setUserId(tokenDto.getUserId());
ValidatorUtils.validateEntity(formDTO,UpdateStyleCategoryFormDTO.UpdateStatusInternalGroup.class);
icPartymemberStyleCategoryDictService.updateStatus(formDTO);
return new Result();
}
/**
* 党员风采-分类下拉框
* 查询条件中展示所有未删除的
* 新增活修改党员风采展示可用的
*
* @param formDTO
* @return
*/
@PostMapping("select-list")
public Result<List<StyleCategoryDictResDTO>> list(@RequestBody StyleSelectListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, StyleSelectListFormDTO.AddUserInternalGroup.class);
return new Result<List<StyleCategoryDictResDTO>>().ok(icPartymemberStyleCategoryDictService.selectList(formDTO));
}
}

15
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;
@ -100,6 +101,8 @@ public class IcPartymemberStyleController {
excel.setGridName(item.getGridName());
excel.setName(item.getName());
excel.setMainDeed(item.getMainDeed());
//导出时新增分类名称
excel.setCategoryName(item.getCategoryName());
return excel;
}).collect(Collectors.toList());
}
@ -117,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));
}
}

20
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/dao/IcPartymemberStyleCategoryDictDao.java

@ -0,0 +1,20 @@
package com.epmet.modules.partymember.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 党员风采分类字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-02-12
*/
@Mapper
public interface IcPartymemberStyleCategoryDictDao extends BaseDao<IcPartymemberStyleCategoryDictEntity> {
Integer getMaxCategoryCode(String customerId);
int updateToDel(@Param("categoryId") String categoryId,@Param("userId") String userId);
}

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

@ -19,7 +19,11 @@ 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;
/**
* 党员风采
@ -29,5 +33,8 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
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);
}

66
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/entity/IcPartymemberStyleCategoryDictEntity.java

@ -0,0 +1,66 @@
package com.epmet.modules.partymember.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 党员风采分类字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-02-12
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_partymember_style_category_dict")
public class IcPartymemberStyleCategoryDictEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 上级分类ID 顶级此列存储0
*/
private String pid;
/**
* 所有上级分类ID英文顿号隔开顶级此列存储0
*/
private String pids;
/**
* 分类编码分类编码+customer_id唯一;从1000开始
*/
private String categoryCode;
/**
* 上级分类编码
*/
private String parentCategoryCode;
/**
* 分类名称
*/
private String categoryName;
/**
* 分类级别1,2,3,4.... 目前只有一级
*/
private Integer level;
/**
* 排序
*/
private Integer sort;
/**
* 0:可用1被禁用默认0
*/
private Boolean beDisabled;
}

8
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;
/**
* 党员姓名
*/
@ -59,5 +64,6 @@ public class IcPartymemberStyleEntity extends BaseEpmetEntity {
* 主要事迹
*/
private String mainDeed;
private String categoryId;
private String categoryCode;
}

3
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleExcel.java

@ -40,4 +40,7 @@ public class IcPartymemberStyleExcel {
@Excel(name = "主要事迹")
private String mainDeed;
@Excel(name="所属分类")
private String categoryName;
}

12
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartymemberStyleImportExcel.java

@ -21,8 +21,10 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
import com.epmet.commons.tools.utils.ExcelVerifyInfo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 党员风采
* 党员风采导入
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-11-18
@ -31,14 +33,18 @@ import lombok.Data;
public class IcPartymemberStyleImportExcel extends ExcelVerifyInfo {
@Excel(name = "所属网格")
@NotBlank(message = "此列不能为空")
private String gridName;
@Excel(name = "党员姓名")
@NotBlank(message = "此列不能为空")
private String name;
@Excel(name = "主要事迹")
@NotBlank(message = "此列不能为空")
private String mainDeed;
@Excel(name = "照片")
private String imageUrl;
@Excel(name="所属分类")
@NotBlank(message = "此列不能为空")
private String categoryName;
}

57
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartymemberStyleCategoryDictService.java

@ -0,0 +1,57 @@
package com.epmet.modules.partymember.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
import com.epmet.resi.partymember.dto.partymember.form.AddStyleCategoryFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleSelectListFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.UpdateStyleCategoryFormDTO;
import com.epmet.resi.partymember.dto.partymember.result.StyleCategoryDictResDTO;
import java.util.List;
import java.util.Map;
/**
* 党员风采分类字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-02-12
*/
public interface IcPartymemberStyleCategoryDictService extends BaseService<IcPartymemberStyleCategoryDictEntity> {
/**
* 党员风采分类列表查询
* @param customerId
* @return
*/
List<StyleCategoryDictResDTO> queryList(String customerId);
/**
* 党员风采分类添加或修改分类
* @param formDTO
*/
void addOrUpdate(AddStyleCategoryFormDTO formDTO);
/**
* 删除的分类如果已经使用过清空已经使用的记录修改时需要重新选择
* @param formDTO
*/
void delete(UpdateStyleCategoryFormDTO formDTO);
/**
* 党员风采分类启用或禁用
* 新增党员风采时不显示已经禁用的分类已经使用了禁用的分类正常显示
* @param formDTO
*/
void updateStatus(UpdateStyleCategoryFormDTO formDTO);
/**
* 党员风采-分类下拉框
* @param formDTO
* @return
*/
List<StyleCategoryDictResDTO> selectList(StyleSelectListFormDTO formDTO);
IcPartymemberStyleCategoryDictEntity get(String categoryId);
Map<String, IcPartymemberStyleCategoryDictEntity> getCategoryDictMap(String customerId);
}

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

183
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartymemberStyleCategoryDictServiceImpl.java

@ -0,0 +1,183 @@
package com.epmet.modules.partymember.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.modules.partymember.dao.IcPartymemberStyleCategoryDictDao;
import com.epmet.modules.partymember.dao.IcPartymemberStyleDao;
import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
import com.epmet.modules.partymember.service.IcPartymemberStyleCategoryDictService;
import com.epmet.resi.partymember.dto.partymember.form.AddStyleCategoryFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.StyleSelectListFormDTO;
import com.epmet.resi.partymember.dto.partymember.form.UpdateStyleCategoryFormDTO;
import com.epmet.resi.partymember.dto.partymember.result.StyleCategoryDictResDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* 党员风采分类字典表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-02-12
*/
@Service
public class IcPartymemberStyleCategoryDictServiceImpl extends BaseServiceImpl<IcPartymemberStyleCategoryDictDao, IcPartymemberStyleCategoryDictEntity> implements IcPartymemberStyleCategoryDictService {
@Autowired
private IcPartymemberStyleDao icPartymemberStyleDao;
/**
* 党员风采分类列表查询
*
* @param customerId
* @return
*/
@Override
public List<StyleCategoryDictResDTO> queryList(String customerId) {
LambdaQueryWrapper<IcPartymemberStyleCategoryDictEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, customerId);
queryWrapper.orderByDesc(IcPartymemberStyleCategoryDictEntity::getSort);
List<IcPartymemberStyleCategoryDictEntity> list = baseDao.selectList(queryWrapper);
List<StyleCategoryDictResDTO> resultList = new ArrayList<>();
for (IcPartymemberStyleCategoryDictEntity entity : list) {
StyleCategoryDictResDTO resDTO = new StyleCategoryDictResDTO();
resDTO.setCategoryId(entity.getId());
resDTO.setCategoryName(entity.getCategoryName());
resDTO.setBeDisabled(entity.getBeDisabled());
resultList.add(resDTO);
}
return resultList;
}
/**
* 党员风采分类添加或修改分类
*
* @param formDTO
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void addOrUpdate(AddStyleCategoryFormDTO formDTO) {
//校验分类名称是否唯一
LambdaQueryWrapper<IcPartymemberStyleCategoryDictEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, formDTO.getCustomerId())
.eq(IcPartymemberStyleCategoryDictEntity::getCategoryName, formDTO.getCategoryName())
.ne(StringUtils.isNotBlank(formDTO.getCategoryId()), IcPartymemberStyleCategoryDictEntity::getId, formDTO.getCategoryId());
Integer cout = baseDao.selectCount(queryWrapper);
if (cout > NumConstant.ZERO) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "分类名称已存在", "分类名称已存在");
}
if (StringUtils.isNotBlank(formDTO.getCategoryId())) {
//更新分类名称
LambdaUpdateWrapper<IcPartymemberStyleCategoryDictEntity> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(IcPartymemberStyleCategoryDictEntity::getCategoryName, formDTO.getCategoryName());
updateWrapper.eq(IcPartymemberStyleCategoryDictEntity::getId, formDTO.getCategoryId());
baseDao.update(null, updateWrapper);
return;
}
IcPartymemberStyleCategoryDictEntity insert = new IcPartymemberStyleCategoryDictEntity();
insert.setCategoryName(formDTO.getCategoryName());
insert.setCustomerId(formDTO.getCustomerId());
insert.setPid(NumConstant.ZERO_STR);
insert.setPids(NumConstant.ZERO_STR);
// 查询 当前客户下最大的一级分类数。
Integer maxCategoryCode = baseDao.getMaxCategoryCode(formDTO.getCustomerId());
if (NumConstant.ZERO == maxCategoryCode) {
maxCategoryCode = 1001;
} else {
maxCategoryCode++;
}
insert.setCategoryCode(String.valueOf(maxCategoryCode));
insert.setParentCategoryCode(NumConstant.ZERO_STR);
insert.setLevel(NumConstant.ONE);
LambdaQueryWrapper<IcPartymemberStyleCategoryDictEntity> maxSortWrapper = new LambdaQueryWrapper<>();
maxSortWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, formDTO.getCustomerId())
.orderByDesc(IcPartymemberStyleCategoryDictEntity::getSort).last("limit 1");
IcPartymemberStyleCategoryDictEntity max = baseDao.selectOne(maxSortWrapper);
insert.setSort(null == max ? NumConstant.ONE : max.getSort() + NumConstant.ONE);
insert.setBeDisabled(false);
baseDao.insert(insert);
}
/**
* 删除的分类如果已经使用过清空已经使用的记录修改时需要重新选择
*
* @param formDTO
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void delete(UpdateStyleCategoryFormDTO formDTO) {
baseDao.updateToDel(formDTO.getCategoryId(),formDTO.getUserId());
icPartymemberStyleDao.clearCategry(formDTO.getCategoryId(),formDTO.getUserId());
}
/**
* 党员风采分类启用或禁用
* 新增党员风采时不显示已经禁用的分类已经使用了禁用的分类正常显示
*
* @param formDTO
*/
@Override
public void updateStatus(UpdateStyleCategoryFormDTO formDTO) {
LambdaUpdateWrapper<IcPartymemberStyleCategoryDictEntity> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(IcPartymemberStyleCategoryDictEntity::getBeDisabled, formDTO.getBeDisabled())
.set(IcPartymemberStyleCategoryDictEntity::getUpdatedBy, formDTO.getUserId())
.set(IcPartymemberStyleCategoryDictEntity::getUpdatedTime, new Date());
updateWrapper.eq(IcPartymemberStyleCategoryDictEntity::getId, formDTO.getCategoryId());
baseDao.update(null, updateWrapper);
}
/**
* 党员风采-分类下拉框
*
* @param formDTO
* @return
*/
@Override
public List<StyleCategoryDictResDTO> selectList(StyleSelectListFormDTO formDTO) {
LambdaQueryWrapper<IcPartymemberStyleCategoryDictEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, formDTO.getCustomerId());
if("addorupdate".equals(formDTO.getType())){
//查询可用的
queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getBeDisabled,false);
}
queryWrapper.orderByAsc(IcPartymemberStyleCategoryDictEntity::getSort);
List<IcPartymemberStyleCategoryDictEntity> list = baseDao.selectList(queryWrapper);
List<StyleCategoryDictResDTO> resultList = new ArrayList<>();
for (IcPartymemberStyleCategoryDictEntity entity : list) {
StyleCategoryDictResDTO resDTO = new StyleCategoryDictResDTO();
resDTO.setCategoryId(entity.getId());
resDTO.setCategoryName(entity.getCategoryName());
resDTO.setBeDisabled(entity.getBeDisabled());
resultList.add(resDTO);
}
return resultList;
}
@Override
public IcPartymemberStyleCategoryDictEntity get(String categoryId) {
return baseDao.selectById(categoryId);
}
@Override
public Map<String, IcPartymemberStyleCategoryDictEntity> getCategoryDictMap(String customerId) {
LambdaQueryWrapper<IcPartymemberStyleCategoryDictEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(IcPartymemberStyleCategoryDictEntity::getCustomerId, customerId);
List<IcPartymemberStyleCategoryDictEntity> list=baseDao.selectList(queryWrapper);
Map<String, IcPartymemberStyleCategoryDictEntity> map=new HashMap<>();
if(!CollectionUtils.isEmpty(list)){
map=list.stream().collect(Collectors.toMap(IcPartymemberStyleCategoryDictEntity::getCategoryName, m -> m, (k1, k2) -> k1));
}
return map;
}
}

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

@ -26,6 +26,7 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
@ -39,13 +40,16 @@ import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.form.GridOptionFormDTO;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.modules.partymember.dao.IcPartymemberStyleDao;
import com.epmet.modules.partymember.entity.IcPartymemberStyleCategoryDictEntity;
import com.epmet.modules.partymember.entity.IcPartymemberStyleEntity;
import com.epmet.modules.partymember.entity.IcPartymemberStyleImageEntity;
import com.epmet.modules.partymember.excel.IcPartymemberStyleImportExcel;
import com.epmet.modules.partymember.service.IcPartymemberStyleCategoryDictService;
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;
@ -76,6 +80,8 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
private IcPartymemberStyleImageService icPartymemberStyleImageService;
@Resource
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Resource
private IcPartymemberStyleCategoryDictService icPartymemberStyleCategoryDictService;
@Override
public PageData<IcPartymemberStyleDTO> page(Map<String, Object> params) {
@ -105,6 +111,9 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
return;
}
item.setGridName(gridInfo.getGridName());
//导出时新增分类名称
IcPartymemberStyleCategoryDictEntity dict = icPartymemberStyleCategoryDictService.get(item.getCategoryId());
item.setCategoryName(null == dict ? StrConstant.EPMETY_STR : dict.getCategoryName());
}
});
@ -133,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 {
@ -188,6 +200,8 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
wrapper.eq(StringUtils.isNotBlank(formDTO.getGridId()), IcPartymemberStyleEntity::getGridId, formDTO.getGridId());
wrapper.like(StringUtils.isNotBlank(formDTO.getName()), IcPartymemberStyleEntity::getName, formDTO.getName());
wrapper.like(StringUtils.isNotBlank(formDTO.getMainDeed()), IcPartymemberStyleEntity::getMainDeed, formDTO.getMainDeed());
wrapper.eq(StringUtils.isNotBlank(formDTO.getCategoryId()),IcPartymemberStyleEntity::getCategoryId,formDTO.getCategoryId());
wrapper.orderByDesc(IcPartymemberStyleEntity::getCreatedTime);
List<IcPartymemberStyleEntity> list = baseDao.selectList(wrapper);
PageInfo<IcPartymemberStyleEntity> pageInfo = new PageInfo<>(list);
List<IcPartymemberStyleDTO> dtoList = ConvertUtils.sourceToTarget(list, IcPartymemberStyleDTO.class);
@ -200,6 +214,8 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
return;
}
item.setGridName(gridInfo.getGridName());
IcPartymemberStyleCategoryDictEntity dict = icPartymemberStyleCategoryDictService.get(item.getCategoryId());
item.setCategoryName(null == dict ? StrConstant.EPMETY_STR : dict.getCategoryName());
}
});
return new PageData<>(dtoList, pageInfo.getTotal());
@ -219,6 +235,7 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
@Transactional(rollbackFor = Exception.class)
public Result importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file) throws IOException {
ExcelImportResult<IcPartymemberStyleImportExcel> importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcPartymemberStyleImportExcel.class);
List<IcPartymemberStyleImportExcel> failList = importResult.getFailList();
//存放错误数据行号
List<Integer> numList = new ArrayList<>();
@ -240,8 +257,10 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
throw new EpmetException(gridOptionResult.getCode(), gridOptionResult.getMsg());
}
Map<String, String> gridMap = gridOptionResult.getData().stream().collect(Collectors.toMap(CustomerGridDTO::getGridName, CustomerGridDTO::getId));
//获取党员风采所有分类:key:分类名称;
Map<String,IcPartymemberStyleCategoryDictEntity> categoryDictMap=icPartymemberStyleCategoryDictService.getCategoryDictMap(tokenDto.getCustomerId());
//1.数据校验 只允许导入当前组织下的网格的数据
//网格名称不一样的数据舍弃
//网格名称不一样的数据舍弃或者分类名称不存在也舍弃
Iterator<IcPartymemberStyleImportExcel> iterator = result.iterator();
while (iterator.hasNext()) {
IcPartymemberStyleImportExcel obj = iterator.next();
@ -249,12 +268,18 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
numList.add(obj.getRowNum());
log.warn(String.format("不是当前组织下可导入的数据,网格名称->%s,行号->%s", obj.getGridName(), obj.getRowNum()));
iterator.remove();
continue;
}
if (null == categoryDictMap.get(obj.getCategoryName().trim())) {
numList.add(obj.getRowNum());
log.warn(String.format("分类名称【%s】不存在,不可导入,行号->%s", obj.getCategoryName(), obj.getRowNum()));
iterator.remove();
}
}
if (CollectionUtils.isEmpty(result)) {
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
return new Result().error(9999, "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "第" + subList + "行未成功!");
}
List<IcPartymemberStyleImageEntity> imageList = new ArrayList<>();
List<IcPartymemberStyleEntity> list = result.stream().map(item -> {
@ -263,25 +288,16 @@ 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());
entity.setCategoryId(null == dictEntity ? StrConstant.EPMETY_STR : dictEntity.getId());
entity.setCategoryCode(null == dictEntity ? StrConstant.EPMETY_STR : dictEntity.getCategoryCode());
AtomicInteger i = new AtomicInteger();
if (StringUtils.isNotBlank(item.getImageUrl())) {
Arrays.asList(item.getImageUrl().split(StrConstant.COMMA)).forEach(url -> {
IcPartymemberStyleImageEntity urlEntity = new IcPartymemberStyleImageEntity();
urlEntity.setImageUrl(url);
urlEntity.setCustomerId(tokenDto.getCustomerId());
urlEntity.setStyleId(entity.getId());
urlEntity.setSort(i.getAndIncrement());
urlEntity.setRevision(NumConstant.ZERO);
urlEntity.setDelFlag(NumConstant.ZERO_STR);
urlEntity.setCreatedBy(tokenDto.getUserId());
urlEntity.setUpdatedBy(tokenDto.getUserId());
urlEntity.setCreatedTime(new Date());
urlEntity.setUpdatedTime(new Date());
imageList.add(urlEntity);
});
}
return entity;
}).collect(Collectors.toList());
@ -293,9 +309,35 @@ public class IcPartymemberStyleServiceImpl extends BaseServiceImpl<IcPartymember
Collections.sort(numList);
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
return new Result().error(9999, str + "第" + subList + "行未成功!");
return new Result().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), str + "第" + subList + "行未成功!");
}
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());
}
}

23
epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.2__style_dict.sql

@ -0,0 +1,23 @@
CREATE TABLE `ic_partymember_style_category_dict` (
`ID` varchar(64) NOT NULL COMMENT '楼栋主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
`PID` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '上级分类ID 顶级此列存储0',
`PIDS` varchar(512) CHARACTER SET utf8 NOT NULL COMMENT '所有上级分类ID英文顿号隔开,顶级此列存储0',
`CATEGORY_CODE` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '分类编码,分类编码+customer_id唯一;从1000开始',
`PARENT_CATEGORY_CODE` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '上级分类编码',
`CATEGORY_NAME` varchar(128) CHARACTER SET utf8 NOT NULL COMMENT '分类名称',
`LEVEL` int(10) NOT NULL COMMENT '分类级别1,2,3,4.... 目前只有一级',
`SORT` int(10) unsigned NOT NULL COMMENT '排序',
`BE_DISABLED` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0:可用;1:被禁用。默认0',
`DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0未删除、1已删除',
`REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='党员风采分类字典表';
alter table ic_partymember_style add COLUMN CATEGORY_ID VARCHAR(64) comment '分类主键' AFTER MAIN_DEED;
alter table ic_partymember_style add COLUMN CATEGORY_CODE VARCHAR(64) comment '分类编码' after CATEGORY_ID;

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/IcPartymemberStyleCategoryDictDao.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.modules.partymember.dao.IcPartymemberStyleCategoryDictDao">
<select id="getMaxCategoryCode" parameterType="java.lang.String" resultType="java.lang.Integer">
SELECT
IFNULL( MAX(CATEGORY_CODE), 0)
FROM
ic_partymember_style_category_dict
WHERE CUSTOMER_ID = #{customerId}
</select>
<update id="updateToDel" parameterType="map">
update ic_partymember_style_category_dict set del_flag='1',UPDATED_BY=#{userId},UPDATED_TIME=now()
where id=#{categoryId}
</update>
</mapper>

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

@ -18,5 +18,29 @@
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<update id="clearCategry" parameterType="map">
update ic_partymember_style
set CATEGORY_ID='',CATEGORY_CODE='',UPDATED_BY=#{userId},UPDATED_TIME=now()
where del_flag='0'
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>
Loading…
Cancel
Save