wangxianzhang 3 years ago
parent
commit
3ec38f8d64
  1. 24
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtSfhyxxcxdsjjResDTO.java
  2. 38
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerOrgRedis.java
  3. 34
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java
  4. 1
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/DataSourceConstant.java
  5. 23
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/stats/UserHouseStatsQueryFormDTO.java
  6. 12
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/DataReportOpenFeignClient.java
  7. 7
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/impl/DataReportOpenFeignClientFallBack.java
  8. 18
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/stats/UserHouseStatsResultDTO.java
  9. 37
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/stats/UserHouseController.java
  10. 17
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactAgencyUserHouseDailyDao.java
  11. 17
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactGridUserHouseDailyDao.java
  12. 115
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactAgencyUserHouseDailyEntity.java
  13. 106
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactGridUserHouseDailyEntity.java
  14. 19
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/UserHouseStatsService.java
  15. 87
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/impl/UserHouseStatsServiceImpl.java
  16. 33
      epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactAgencyUserHouseDailyDao.xml
  17. 32
      epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactGridUserHouseDailyDao.xml
  18. 15
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/CommunityUserHouseStatsFormDTO.java
  19. 15
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/UsingCommunityStatsFormDTO.java
  20. 20
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java
  21. 20
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java
  22. 21
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UsingCommunityStatsResultDTO.java
  23. 11
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java
  24. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java
  25. 16
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  26. 11
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java
  27. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/EnterpriseImportExcelDTO.java
  28. 5
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/AgencyService.java
  29. 2
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java
  30. 55
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java
  31. 121
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java
  32. 29
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml
  33. 2
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/IcEventListFormDTO.java
  34. 8
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/IcEventServiceImpl.java
  35. 14
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java
  36. 5
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormGroupDTO.java
  37. 3
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java
  38. 10
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormItemGroupEntity.java
  39. 50
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java
  40. 56
      epmet-module/oper-customize/oper-customize-server/src/main/resources/db/migration/V0.0.40__itemgroup_code.sql
  41. 7
      epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml
  42. 8
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java
  43. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java
  44. 105
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcResiComparisonRecordDTO.java
  45. 27
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTVaccineListDTO.java
  46. 4
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java
  47. 33
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ComparisonFormDTO.java
  48. 6
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java
  49. 32
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RHZKStatisticsFormDTO.java
  50. 39
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ResiComparisonListFormDTO.java
  51. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserChartFormDTO.java
  52. 20
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ComparisonResultDTO.java
  53. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/MyNatListResultDTO.java
  54. 13
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java
  55. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatUserInfoResultDTO.java
  56. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/OwnerRelationResultDTO.java
  57. 38
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RHZKStatisticsResultDTO.java
  58. 70
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ResiComparisonListResultDTO.java
  59. 13
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserChartResultDTO.java
  60. 7
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  61. 10
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  62. 10
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java
  63. 9
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java
  64. 26
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java
  65. 136
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiComparisonRecordController.java
  66. 18
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  67. 44
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiComparisonRecordDao.java
  68. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  69. 9
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java
  70. 49
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatCompareRecordEntity.java
  71. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java
  72. 71
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiComparisonRecordEntity.java
  73. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcVaccineEntity.java
  74. 1
      epmet-user/epmet-user-server/src/main/java/com/epmet/enums/DataSyncEnum.java
  75. 55
      epmet-user/epmet-user-server/src/main/java/com/epmet/enums/RenHuConditionEnum.java
  76. 64
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcResiComparisonRecordExcel.java
  77. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java
  78. 14
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java
  79. 119
      epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java
  80. 112
      epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java
  81. 13
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java
  82. 27
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiComparisonRecordService.java
  83. 11
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java
  84. 285
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java
  85. 24
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java
  86. 9
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java
  87. 357
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiComparisonRecordServiceImpl.java
  88. 97
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java
  89. 21
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.88__ic_resi_comparison_record.sql
  90. 4
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__alter_ic_nat.sql
  91. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx
  92. 3
      epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml
  93. 2
      epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecRelationDao.xml
  94. 3
      epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecordDao.xml
  95. 12
      epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml
  96. 114
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiComparisonRecordDao.xml
  97. 96
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml
  98. 18
      epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml

24
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtSfhyxxcxdsjjResDTO.java

@ -0,0 +1,24 @@
package com.epmet.commons.tools.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Description 根据身份证号和姓名查询公安部备案信息
*/
@NoArgsConstructor
@Data
public class YtSfhyxxcxdsjjResDTO {
private int code = 200;
private List<Result> result;
@Data
public static class Result {
//身份证号
private String GMSFHM;
//姓名
private String XM;
}
}

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

@ -1,7 +1,6 @@
package com.epmet.commons.tools.redis.common;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.dto.form.CustomerGridFormDTO;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.CommonAggFeignClient;
@ -13,6 +12,7 @@ import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@ -55,6 +55,10 @@ public class CustomerOrgRedis {
* @date 2021/11/5 3:12 下午
*/
public static GridInfoCache getGridInfo(String gridId){
if (StringUtils.isBlank(gridId)) {
log.warn("查询网格缓存,gridId is null");
return null;
}
String key = RedisKeys.getGridInfoKey(gridId);
Map<String, Object> grid = customerOrgRedis.redisUtils.hGetAll(key);
if (!CollectionUtils.isEmpty(grid)) {
@ -110,4 +114,36 @@ public class CustomerOrgRedis {
customerOrgRedis.redisUtils.delete(key);
}
/**
* 拼接orgIdPath
* @param orgId
* @param orgType
* @return
*/
public static String getOrgIdPath(String orgId, String orgType) {
String orgPids = null;
if ("grid".equals(orgType)) {
GridInfoCache gridInfo = getGridInfo(orgId);
if (gridInfo == null) {
log.error("查询网格信息失败:{}", orgId);
return null;
}
orgPids = gridInfo.getPids();
} else if ("agency".equals(orgType)) {
AgencyInfoCache agencyInfo = getAgencyInfo(orgId);
if (agencyInfo == null) {
log.error("查询组织信息失败:{}", orgId);
return null;
}
orgPids = agencyInfo.getPids();
}
if (StringUtils.isBlank(orgPids) || "0".equals(orgPids)) {
return orgId;
}
return orgPids.concat(":").concat(orgId);
}
}

34
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java

@ -6,6 +6,7 @@ import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.YtDataSyncResDTO;
import com.epmet.commons.tools.dto.result.YtHscyResDTO;
import com.epmet.commons.tools.dto.result.YtHsjcResDTO;
import com.epmet.commons.tools.dto.result.YtSfhyxxcxdsjjResDTO;
import com.google.common.util.concurrent.RateLimiter;
import lombok.extern.slf4j.Slf4j;
@ -226,6 +227,39 @@ public class YtHsResUtils {
return failResult;
}
/**
* desc:根据身份证号和姓名查询公安部备案信息
*
* @return
*/
public static YtSfhyxxcxdsjjResDTO sfhyxxcxdsjj(String gmsfhm, String xm) {
try {
tryAcquire("sfhyxxcxdsjj");
Map<String, Object> param = new HashMap<>();
param.put(APP_KEY, "RhOHlu7Bmkrj8Vk7uGTNNxHqI");
param.put("gmsfhm", gmsfhm);
param.put("xm", xm);
log.info("sfhyxxcxdsjj api param:{}", param);
Result<String> result = HttpClientManager.getInstance().sendGet(SERVER_URL + "sfhyxxcxdsjj", param);
log.info("sfhyxxcxdsjj api result:{}", JSON.toJSONString(result));
if (result.success()) {
String data = result.getData();
JSONObject jsonObject = JSON.parseObject(data);
if (jsonObject != null && StrConstant.HTTP_STATUS_OK.equals(jsonObject.getString(StrConstant.HTTP_RESP_CODE))) {
return JSON.parseObject(result.getData(), YtSfhyxxcxdsjjResDTO.class);
} else {
log.warn("sfhyxxcxdsjj 烟台公安部居民基础信息调用失败");
}
}
} catch (Exception e) {
log.error(String.format("烟台公民基本信息查询异常gmsfhm:%s", gmsfhm), e);
}
YtSfhyxxcxdsjjResDTO resultResult = new YtSfhyxxcxdsjjResDTO();
return resultResult;
}
public static void main(String[] args) {
//YtDataSyncResDTO canji = canji("123", "123");

1
epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/DataSourceConstant.java

@ -7,5 +7,6 @@ public interface DataSourceConstant {
*/
String EVALUATION_INDEX = "evaluationIndex";
String STATS_DISPLAY = "statsDisplay";
String STATS = "stats";
}

23
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/stats/UserHouseStatsQueryFormDTO.java

@ -0,0 +1,23 @@
package com.epmet.dto.form.stats;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* 人房信息查询dto
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserHouseStatsQueryFormDTO {
private String orgId;
private String orgType;
@NotBlank(message = "dateId不能为空")
private String dateId;
}

12
epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/DataReportOpenFeignClient.java

@ -2,11 +2,15 @@ package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.stats.UserHouseStatsQueryFormDTO;
import com.epmet.dto.result.plugins.AgencyNodeDTO;
import com.epmet.feign.impl.DataReportOpenFeignClientFallBackFactory;
import com.epmet.stats.UserHouseStatsResultDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 本服务对外开放的API,其他服务通过引用此client调用该服务
@ -24,4 +28,12 @@ public interface DataReportOpenFeignClient {
**/
@GetMapping("/data/report/screen/agency/querystaffagencytree/{agencyId}")
Result<AgencyNodeDTO> queryStaffAgencyTree(@PathVariable("agencyId") String agencyId);
/**
* 通过dateId查询人房统计信息
* @param input 3个参数就不用dto了类太多
* @return
*/
@PostMapping("/data/report/userHouse/getUserHouseDailyStatsByDateId")
Result<UserHouseStatsResultDTO> getUserHouseDailyStatsByDateId(@RequestBody UserHouseStatsQueryFormDTO input);
}

7
epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/impl/DataReportOpenFeignClientFallBack.java

@ -3,8 +3,10 @@ package com.epmet.feign.impl;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.stats.UserHouseStatsQueryFormDTO;
import com.epmet.dto.result.plugins.AgencyNodeDTO;
import com.epmet.feign.DataReportOpenFeignClient;
import com.epmet.stats.UserHouseStatsResultDTO;
//@Component
public class DataReportOpenFeignClientFallBack implements DataReportOpenFeignClient {
@ -17,4 +19,9 @@ public class DataReportOpenFeignClientFallBack implements DataReportOpenFeignCli
public Result<AgencyNodeDTO> queryStaffAgencyTree(String agencyId) {
return ModuleUtils.feignConError(ServiceConstant.DATA_REPORT_SERVER, "queryStaffAgencyTree",agencyId);
}
@Override
public Result<UserHouseStatsResultDTO> getUserHouseDailyStatsByDateId(UserHouseStatsQueryFormDTO input) {
return ModuleUtils.feignConError(ServiceConstant.DATA_REPORT_SERVER, "getUserHouseDailyStatsByDateId",input);
}
}

18
epmet-module/data-report/data-report-client/src/main/java/com/epmet/stats/UserHouseStatsResultDTO.java

@ -0,0 +1,18 @@
package com.epmet.stats;
import lombok.Data;
/**
* 人房信息统计
*/
@Data
public class UserHouseStatsResultDTO {
private Integer houseTotal = 0;
private Integer zzHouseTotal = 0;
private Integer czHouseTotal = 0;
private Integer xzHouseTotal = 0;
private Integer userTotal = 0;
private Integer czUserTotal = 0;
private Integer ldUserTotal = 0;
private Integer usingCommunityNum = 0;
}

37
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/stats/UserHouseController.java

@ -0,0 +1,37 @@
package com.epmet.datareport.controller.stats;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.datareport.service.stats.UserHouseStatsService;
import com.epmet.dto.form.stats.UserHouseStatsQueryFormDTO;
import com.epmet.stats.UserHouseStatsResultDTO;
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;
@RestController
@RequestMapping("userHouse")
public class UserHouseController {
@Autowired
private UserHouseStatsService userHouseStatsService;
/**
* 通过dateId查询人房统计信息
* @param input
* @return
*/
@PostMapping("getUserHouseDailyStatsByDateId")
public Result<UserHouseStatsResultDTO> getUserHouseDailyStatsByDateId(@RequestBody UserHouseStatsQueryFormDTO input) {
ValidatorUtils.validateEntity(input);
String orgId = input.getOrgId();
String orgType = input.getOrgType();
String dateId = input.getDateId();
UserHouseStatsResultDTO r = userHouseStatsService.getUserHouseDailyStats(orgId, orgType, dateId);
return new Result<UserHouseStatsResultDTO>().ok(r);
}
}

17
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactAgencyUserHouseDailyDao.java

@ -0,0 +1,17 @@
package com.epmet.datareport.dao.stats;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.datareport.entity.stats.FactAgencyUserHouseDailyEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 人房信息统计数按天统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-05-27
*/
@Mapper
public interface FactAgencyUserHouseDailyDao extends BaseDao<FactAgencyUserHouseDailyEntity> {
}

17
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactGridUserHouseDailyDao.java

@ -0,0 +1,17 @@
package com.epmet.datareport.dao.stats;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.datareport.entity.stats.FactGridUserHouseDailyEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 网格的人房信息统计数按天统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-05-27
*/
@Mapper
public interface FactGridUserHouseDailyDao extends BaseDao<FactGridUserHouseDailyEntity> {
}

115
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactAgencyUserHouseDailyEntity.java

@ -0,0 +1,115 @@
package com.epmet.datareport.entity.stats;
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-05-27
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("fact_agency_user_house_daily")
public class FactAgencyUserHouseDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 数据更新至yyyyMMdd;
*/
private String dateId;
/**
* 组织id
*/
private String agencyId;
/**
* agency_id所属的机关级别社区级community
街道:street,
区县级: district,
市级: city
省级:province
*/
private String level;
/**
* 组织i所属的组织id
*/
private String pid;
/**
* 组织i所有上级id
*/
private String pids;
/**
* 小区总数
*/
private Integer neighbourhoodsCount;
/**
* 房屋总数
*/
private Integer houseCount;
/**
* 自住房屋总数
*/
private Integer houseSelfCount;
/**
* 出租房屋总数
*/
private Integer houseLeaseCount;
/**
* 闲置房屋总数
*/
private Integer houseIdleCount;
/**
* 居民总数
*/
private Integer userCount;
/**
* 常住居民总数
*/
private Integer userResiCount;
/**
* 流动居民总数
*/
private Integer userFloatCount;
/**
* 当日新增房屋数
*/
private Integer houseIncr;
/**
* 当日修改房屋数
*/
private Integer houseModify;
/**
* 当日新增居民数
*/
private Integer userIncr;
/**
* 当日修改居民数
*/
private Integer userModify;
}

106
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactGridUserHouseDailyEntity.java

@ -0,0 +1,106 @@
package com.epmet.datareport.entity.stats;
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-05-27
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("fact_grid_user_house_daily")
public class FactGridUserHouseDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 数据更新至yyyyMMdd;
*/
private String dateId;
/**
* 网格id
*/
private String gridId;
/**
* 网格所属的组织id
*/
private String pid;
/**
* 网格所有上级id
*/
private String pids;
/**
* 小区总数
*/
private Integer neighbourhoodsCount;
/**
* 房屋总数
*/
private Integer houseCount;
/**
* 自住房屋总数
*/
private Integer houseSelfCount;
/**
* 出租房屋总数
*/
private Integer houseLeaseCount;
/**
* 闲置房屋总数
*/
private Integer houseIdleCount;
/**
* 居民总数
*/
private Integer userCount;
/**
* 常住居民总数
*/
private Integer userResiCount;
/**
* 流动居民总数
*/
private Integer userFloatCount;
/**
* 当日新增房屋数
*/
private Integer houseIncr;
/**
* 当日修改房屋数
*/
private Integer houseModify;
/**
* 当日新增居民数
*/
private Integer userIncr;
/**
* 当日修改居民数
*/
private Integer userModify;
}

19
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/UserHouseStatsService.java

@ -0,0 +1,19 @@
package com.epmet.datareport.service.stats;
import com.epmet.stats.UserHouseStatsResultDTO;
import lombok.extern.slf4j.Slf4j;
/**
* 人房统计service
*/
public interface UserHouseStatsService {
/**
* 查询指定dateId的人房统计信息
* @param orgId
* @param orgType
* @param dateId
* @return
*/
UserHouseStatsResultDTO getUserHouseDailyStats(String orgId, String orgType, String dateId);
}

87
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/impl/UserHouseStatsServiceImpl.java

@ -0,0 +1,87 @@
package com.epmet.datareport.service.stats.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.constant.DataSourceConstant;
import com.epmet.datareport.dao.stats.FactAgencyUserHouseDailyDao;
import com.epmet.datareport.dao.stats.FactGridUserHouseDailyDao;
import com.epmet.datareport.entity.stats.FactAgencyUserHouseDailyEntity;
import com.epmet.datareport.entity.stats.FactGridUserHouseDailyEntity;
import com.epmet.datareport.service.stats.UserHouseStatsService;
import com.epmet.stats.UserHouseStatsResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
@DataSource(DataSourceConstant.STATS)
public class UserHouseStatsServiceImpl implements UserHouseStatsService {
@Autowired
private FactGridUserHouseDailyDao factGridUserHouseDailyDao;
@Autowired
private FactAgencyUserHouseDailyDao factAgencyUserHouseDailyDao;
@Override
public UserHouseStatsResultDTO getUserHouseDailyStats(String orgId, String orgType, String dateId) {
// 没有传参,使用当前登录人的
if (StringUtils.isEmpty(orgId) || StringUtils.isEmpty(orgType)) {
String userId = EpmetRequestHolder.getLoginUserId();
String customerId = EpmetRequestHolder.getLoginUserCustomerId();
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId);
if (null == staffInfo) {
throw new EpmetException(String.format("查询工作人员%s缓存信息失败:%s", userId));
}
orgId = staffInfo.getAgencyId();
orgType = "agency";
}
// 结果对象初始化
UserHouseStatsResultDTO result = new UserHouseStatsResultDTO();
if ("agency".equals(orgType)) {
// 查询的目标是组织
LambdaQueryWrapper<FactAgencyUserHouseDailyEntity> query = new LambdaQueryWrapper<>();
query.eq(FactAgencyUserHouseDailyEntity::getDateId, dateId);
query.eq(FactAgencyUserHouseDailyEntity::getAgencyId, orgId);
FactAgencyUserHouseDailyEntity agencyDailyStats = factAgencyUserHouseDailyDao.selectOne(query);
if (agencyDailyStats != null) {
result.setHouseTotal(agencyDailyStats.getHouseCount());
result.setCzHouseTotal(agencyDailyStats.getHouseLeaseCount());
result.setXzHouseTotal(agencyDailyStats.getHouseIdleCount());
result.setZzHouseTotal(agencyDailyStats.getHouseSelfCount());
result.setUserTotal(agencyDailyStats.getUserCount());
result.setCzUserTotal(agencyDailyStats.getUserResiCount());
result.setLdUserTotal(agencyDailyStats.getUserFloatCount());
}
} else {
// 查询的目标是网格
LambdaQueryWrapper<FactGridUserHouseDailyEntity> query = new LambdaQueryWrapper<>();
query.eq(FactGridUserHouseDailyEntity::getDateId, dateId);
query.eq(FactGridUserHouseDailyEntity::getGridId, orgId);
FactGridUserHouseDailyEntity gridDailyStats = factGridUserHouseDailyDao.selectOne(query);
if (gridDailyStats != null) {
result.setHouseTotal(gridDailyStats.getHouseCount());
result.setCzHouseTotal(gridDailyStats.getHouseLeaseCount());
result.setXzHouseTotal(gridDailyStats.getHouseIdleCount());
result.setZzHouseTotal(gridDailyStats.getHouseSelfCount());
result.setUserTotal(gridDailyStats.getUserCount());
result.setCzUserTotal(gridDailyStats.getUserResiCount());
result.setLdUserTotal(gridDailyStats.getUserFloatCount());
}
}
return result;
}
}

33
epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactAgencyUserHouseDailyDao.xml

@ -0,0 +1,33 @@
<?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.datareport.dao.stats.FactAgencyUserHouseDailyDao">
<resultMap type="com.epmet.datareport.entity.stats.FactAgencyUserHouseDailyEntity" id="factAgencyUserHouseDailyMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="dateId" column="DATE_ID"/>
<result property="agencyId" column="AGENCY_ID"/>
<result property="level" column="LEVEL"/>
<result property="pid" column="PID"/>
<result property="pids" column="PIDS"/>
<result property="neighbourhoodsCount" column="NEIGHBOURHOODS_COUNT"/>
<result property="houseCount" column="HOUSE_COUNT"/>
<result property="houseSelfCount" column="HOUSE_SELF_COUNT"/>
<result property="houseLeaseCount" column="HOUSE_LEASE_COUNT"/>
<result property="houseIdleCount" column="HOUSE_IDLE_COUNT"/>
<result property="userCount" column="USER_COUNT"/>
<result property="userResiCount" column="USER_RESI_COUNT"/>
<result property="userFloatCount" column="USER_FLOAT_COUNT"/>
<result property="houseIncr" column="HOUSE_INCR"/>
<result property="houseModify" column="HOUSE_MODIFY"/>
<result property="userIncr" column="USER_INCR"/>
<result property="userModify" column="USER_MODIFY"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
</mapper>

32
epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactGridUserHouseDailyDao.xml

@ -0,0 +1,32 @@
<?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.datareport.dao.stats.FactGridUserHouseDailyDao">
<resultMap type="com.epmet.datareport.entity.stats.FactGridUserHouseDailyEntity" id="factGridUserHouseDailyMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="dateId" column="DATE_ID"/>
<result property="gridId" column="GRID_ID"/>
<result property="pid" column="PID"/>
<result property="pids" column="PIDS"/>
<result property="neighbourhoodsCount" column="NEIGHBOURHOODS_COUNT"/>
<result property="houseCount" column="HOUSE_COUNT"/>
<result property="houseSelfCount" column="HOUSE_SELF_COUNT"/>
<result property="houseLeaseCount" column="HOUSE_LEASE_COUNT"/>
<result property="houseIdleCount" column="HOUSE_IDLE_COUNT"/>
<result property="userCount" column="USER_COUNT"/>
<result property="userResiCount" column="USER_RESI_COUNT"/>
<result property="userFloatCount" column="USER_FLOAT_COUNT"/>
<result property="houseIncr" column="HOUSE_INCR"/>
<result property="houseModify" column="HOUSE_MODIFY"/>
<result property="userIncr" column="USER_INCR"/>
<result property="userModify" column="USER_MODIFY"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
</mapper>

15
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/CommunityUserHouseStatsFormDTO.java

@ -0,0 +1,15 @@
package com.epmet.dto.form;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommunityUserHouseStatsFormDTO {
private String orgId;
private String orgType;
private Integer pageNo = 1;
private Integer pageSize = 10;
}

15
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/UsingCommunityStatsFormDTO.java

@ -0,0 +1,15 @@
package com.epmet.dto.form;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UsingCommunityStatsFormDTO {
private String orgId;
private String orgType;
}

20
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java

@ -56,6 +56,26 @@ public class HouseChartResultDTO implements Serializable {
*/
private Double wscHouseRatio = 0.0;
/**
* 房屋总数-较上月
*/
private Integer houseTotalJSY;
/**
* 自住房屋树-较上月
*/
private Integer zzHouseTotalJSY;
/**
* 出租房屋总数-较上月
*/
private Integer czHouseTotalJSY;
/**
* 闲置房屋总数-较上月
*/
private Integer xzHouseTotalJSY;
@JsonIgnore
private Integer num;
//1:出租 0:自住 2:闲置 3:未出售

20
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java

@ -1,8 +1,10 @@
package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author sun
@ -79,4 +81,22 @@ public class SubUserHouseListResultDTO implements Serializable {
*/
private Double ldUserRatio = 0.0;
/**
* 开通平台的社区数
*/
private Integer usingCommunityNum;
/**
* 人户一致人在户不在户在人不在
* 为空的 暂不清楚
*/
private Integer rhyzUserTotal = NumConstant.ZERO;
private BigDecimal rhyzUserRatio = NumConstant.ZERO_DECIMAL;
private Integer rzhbzUserTotal = NumConstant.ZERO;
private BigDecimal rzhbzUserRatio = NumConstant.ZERO_DECIMAL;
private Integer hzrbzUserTotal = NumConstant.ZERO;
private BigDecimal hzrbzUserRatio = NumConstant.ZERO_DECIMAL;
private Integer zbqcUserTotal = NumConstant.ZERO;
private BigDecimal zbqcUserRatio = NumConstant.ZERO_DECIMAL;
}

21
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UsingCommunityStatsResultDTO.java

@ -0,0 +1,21 @@
package com.epmet.dto.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UsingCommunityStatsResultDTO {
/**
* 开通平台社区数
*/
private Integer usingCommunityNum;
/**
* 开通平台社区数-较上月
*/
private Integer usingCommunityNumJSY;
}

11
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java

@ -614,5 +614,14 @@ public class AgencyController {
return new Result<List<CustomerTreeDTO>>().ok(agencyService.getCustomerTree(tokenDto));
}
/**
* 开通平台的社区数统计
* @return
*/
@RequestMapping("usingCommunityStats")
public Result<UsingCommunityStatsResultDTO> usingCommunityStats(@RequestBody UsingCommunityStatsFormDTO input) {
String orgId = input.getOrgId();
String orgType = input.getOrgType();
return new Result<UsingCommunityStatsResultDTO>().ok(agencyService.usingCommunityStats(orgId, orgType));
}
}

1
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java

@ -342,6 +342,7 @@ public class CustomerAgencyController {
/**
* @Description 获取客户下组织树不含网格和部门
* 哪些地方用到了比如办事指南-指南管理查询条件
* @Param tokenDTO
* @Return {@link Result< AgencyTreeResultDTO >}
* @Author zhaoqifeng

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

@ -661,4 +661,20 @@ public class HouseController implements ResultDataResolver {
return new Result<PageData<IcHouseListResultDTO>>().ok(houseService.houseStatisListDetail(formDTO));
}
/**
* 针对社区的人房统计列表
* @return
*/
@PostMapping("usingCommunityUserHouseStats")
public Result<PageData<SubUserHouseListResultDTO>> communityUserHouseStats(@RequestBody CommunityUserHouseStatsFormDTO input) {
String orgId = input.getOrgId();
String orgType = input.getOrgType();
Integer pageNo = input.getPageNo();
Integer pageSize = input.getPageSize();
PageData<SubUserHouseListResultDTO> r = houseService.usingCommunityUserHouseStats(orgId, orgType, pageNo, pageSize);
return new Result<PageData<SubUserHouseListResultDTO>>().ok(r);
}
}

11
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java

@ -27,6 +27,7 @@ import com.epmet.entity.CustomerAgencyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
@ -387,5 +388,15 @@ public interface CustomerAgencyDao extends BaseDao<CustomerAgencyEntity> {
*/
CustomerAgencyEntity getAgencyByUserId(@Param("userId") String userId, @Param("customerId") String customerId);
/**
* 开通社区列表
* @param agencyId 机关组织的id
* @param agencyOrgIdPath agency的id路径path包含自己
* @param endDate 截止日期也即查询截止改日期有多少社区在使用
* @return
*/
List<String> getUsingCommunityList(@Param("customerId") String customerId, @Param("agencyId") String agencyId, @Param("agencyOrgIdPath") String agencyOrgIdPath, @Param("endDate") Date endDate);
List<String> getCommunitysByOrgIdPath(@Param("customerId") String customerId, @Param("orgId") String orgId, @Param("orgIdPath") String orgIdPath);
}

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/EnterpriseImportExcelDTO.java

@ -90,7 +90,7 @@ public class EnterpriseImportExcelDTO {
* 默认0
*/
@ColumnWidth(20)
@ExcelProperty(value = "场所类别(九小场所/企事业单位)")
@ExcelProperty(value = "场所类别")
private String placeCategoryName;
@ColumnWidth(20)

5
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/AgencyService.java

@ -199,4 +199,9 @@ public interface AgencyService {
*/
List<CustomerTreeDTO> getCustomerTree(TokenDto tokenDto);
/**
* 开通平台的社区数统计
* @return
*/
UsingCommunityStatsResultDTO usingCommunityStats(String orgId, String orgType);
}

2
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java

@ -197,4 +197,6 @@ public interface HouseService {
PageData<ReportHouseTestResultDTO> listHouses4ReportTest(String houseId, Integer pageNo, Integer pageSize);
PageData<IcHouseListResultDTO> houseStatisListDetail(HouseChartFormDTO formDTO);
PageData<SubUserHouseListResultDTO> usingCommunityUserHouseStats(String orgId, String orgType, Integer pageNo, Integer pageSize);
}

55
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java

@ -34,9 +34,7 @@ import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.NodeTreeUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.*;
import com.epmet.constant.CustomerAgencyConstant;
import com.epmet.constant.OrgInfoConstant;
import com.epmet.constant.RoleKeyConstants;
@ -1117,4 +1115,55 @@ public class AgencyServiceImpl implements AgencyService {
}
@Override
public UsingCommunityStatsResultDTO usingCommunityStats(String orgId, String orgType) {
String customerId = EpmetRequestHolder.getLoginUserCustomerId();
String userId = EpmetRequestHolder.getLoginUserId();
// 所属组织的上级
String agencyOrgIdPath = null;
if (StringUtils.isBlank(orgId)) {
// 没有传参数,使用当前登录人员所属的组织去查询
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId);
if (staffInfo == null) {
String errorMsg = String.format("查询当前工作人员信息失败。staffId:%s", userId);
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), errorMsg, errorMsg);
}
orgId = staffInfo.getAgencyId();
orgType = "agency";
// agencyOrgIdPath = getOrgIdPath(staffInfo);
}
if ("agency".equals(orgType)) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date endTime = calendar.getTime();
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(orgId);
agencyOrgIdPath = getOrgIdPath(agencyInfo.getPids(), agencyInfo.getId());
List<String> currentUsingCommunityList = customerAgencyDao.getUsingCommunityList(customerId, orgId, agencyOrgIdPath, null);
List<String> preferUsingCommunityList = customerAgencyDao.getUsingCommunityList(customerId, orgId, agencyOrgIdPath, endTime);
return new UsingCommunityStatsResultDTO(currentUsingCommunityList.size(), currentUsingCommunityList.size() - preferUsingCommunityList.size());
} else if ("grid".equals(orgType)) {
// 网格下不会有该数据,给个0
return new UsingCommunityStatsResultDTO(0, 0);
}
return null;
}
private String getOrgIdPath(String orgPids, String orgId) {
if (StringUtils.isBlank(orgPids) || "0".equals(orgPids)) {
return orgId;
}
return orgPids.concat(":").concat(orgId);
}
}

121
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java

@ -8,6 +8,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.HouseQrcodeEnum;
@ -34,17 +35,17 @@ import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.*;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.form.stats.UserHouseStatsQueryFormDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.*;
import com.epmet.enums.*;
import com.epmet.feign.EpmetAdminOpenFeignClient;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.feign.*;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener;
import com.epmet.redis.CustomerAgencyRedis;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.*;
import com.epmet.stats.UserHouseStatsResultDTO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.cache.Cache;
@ -68,6 +69,7 @@ import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
@ -132,6 +134,9 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
@Autowired
private IcBuildingUnitDao icBuildingUnitDao;
@Autowired
private DataReportOpenFeignClient dataReportOpenFeignClient;
@Override
@Transactional(rollbackFor = Exception.class)
@ -718,6 +723,17 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
resultDTO.setWscHouseRatio(Double.valueOf((resultDTO.getHouseTotal() == 0 || resultDTO.getWscHouseTotal() > resultDTO.getHouseTotal()) ? "0" : numberFormat.format(((float) resultDTO.getWscHouseTotal() / (float) resultDTO.getHouseTotal()) * 100)));
resultDTO.setOrgId(formDTO.getOrgId());
resultDTO.setOrgType(formDTO.getOrgType());
// 加载上个月,该组织的人房统计信息,并且计算较上月信息
Date lastDayOfLastMonth = DateUtils.getLastDayOfMonth(DateUtils.addDateMonths(new Date(), -1));
UserHouseStatsQueryFormDTO form = new UserHouseStatsQueryFormDTO(formDTO.getOrgId(), formDTO.getOrgType(), DateUtils.format(lastDayOfLastMonth, "yyyyMMdd"));
UserHouseStatsResultDTO lastMonthUserHouseStats = getResultDataOrThrowsException(dataReportOpenFeignClient.getUserHouseDailyStatsByDateId(form), ServiceConstant.DATA_REPORT_SERVER,
EpmetErrorCode.SERVER_ERROR.getCode(), null, null);
resultDTO.setHouseTotalJSY(resultDTO.getHouseTotal() - lastMonthUserHouseStats.getHouseTotal());
resultDTO.setCzHouseTotalJSY(resultDTO.getCzHouseTotal() - lastMonthUserHouseStats.getCzHouseTotal());
resultDTO.setXzHouseTotalJSY(resultDTO.getXzHouseTotal() - lastMonthUserHouseStats.getXzHouseTotal());
resultDTO.setZzHouseTotalJSY(resultDTO.getZzHouseTotal() - lastMonthUserHouseStats.getZzHouseTotal());
return resultDTO;
}
@ -927,6 +943,8 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
houseDTO.setOrgId(id);
houseList.add(houseChart(houseDTO));
}
//start 2022.11.17需求:http://zentao.elinkservice.cn/story-view-718.html
//原来饼图是:居民总数、常住人口数、流动人口数 后改为下面的人户状况饼图,后面如果所有客户都上线了,就把第2步的查询注释掉。
//2.直属下级列表的居民数据
UserChartFormDTO userDTO = new UserChartFormDTO();
userDTO.setOrgType(orgType);
@ -935,6 +953,15 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
if (!userResult.success()) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取居民人房统计数据失败" + userResult.getInternalMsg(), userResult.getMsg());
}
//end
//3.居民总数、人户一致、人在户不在、户在人不在,没填写是暂不清楚
RHZKStatisticsFormDTO rhzkStatisticsFormDTO = new RHZKStatisticsFormDTO();
rhzkStatisticsFormDTO.setOrgIds(idList);
rhzkStatisticsFormDTO.setOrgType(orgType);
Result<List<RHZKStatisticsResultDTO>> rhzkResult = epmetUserOpenFeignClient.renHuCondition(rhzkStatisticsFormDTO);
if (!rhzkResult.success()){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取居民人户状况统计数据失败" + rhzkResult.getInternalMsg(), rhzkResult.getMsg());
}
//3.汇总封装数据
SubUserHouseListResultDTO dto = null;
for (String id : idList) {
@ -964,6 +991,35 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
dto.setLdUserRatio(u.getLdUserRatio());
}
}
// 为每一个子级组织,查询开通了多少个社区
if ("agency".equals(dto.getOrgType())) {
AgencyService agencyService = SpringContextUtils.getBean(AgencyService.class);
if (agencyService != null) {
UsingCommunityStatsResultDTO usingCommunityStats = agencyService.usingCommunityStats(dto.getOrgId(), dto.getOrgType());
if (usingCommunityStats != null) {
dto.setUsingCommunityNum(usingCommunityStats.getUsingCommunityNum());
}
}
} else if ("grid".equals(dto.getOrgType())) {
// 网格这项数据为0
dto.setUsingCommunityNum(0);
}
for (RHZKStatisticsResultDTO r : rhzkResult.getData()) {
if (StringUtils.isNotBlank(r.getOrgId())){
if (r.getOrgId().equals(id)){
dto.setRhyzUserTotal(r.getRhyzUserTotal());
dto.setRhyzUserRatio(r.getRhyzUserRatio());
dto.setRzhbzUserTotal(r.getRzhbzUserTotal());
dto.setRzhbzUserRatio(r.getRzhbzUserRatio());
dto.setHzrbzUserTotal(r.getHzrbzUserTotal());
dto.setHzrbzUserRatio(r.getHzrbzUserRatio());
dto.setZbqcUserTotal(r.getZbqcUserTotal());
dto.setZbqcUserRatio(r.getZbqcUserRatio());
dto.setUserTotal(r.getUserTotal());
}
}
}
list.add(dto);
}
return list;
@ -1365,5 +1421,62 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
return new PageData<>(list, pageInfo.getTotal());
}
@Override
public PageData<SubUserHouseListResultDTO> usingCommunityUserHouseStats(String orgId, String orgType, Integer pageNo, Integer pageSize) {
String customerId = EpmetRequestHolder.getLoginUserCustomerId();
if (StringUtils.isBlank(orgId)) {
// 没有传参数,使用当前登录人员所属的组织去查询
String userId = EpmetRequestHolder.getLoginUserId();
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId);
if (staffInfo == null) {
String errorMsg = String.format("查询当前工作人员信息失败。staffId:%s", userId);
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), errorMsg, errorMsg);
}
orgId = staffInfo.getAgencyId();
orgType = "agency";
}
PageHelper.startPage(pageNo, pageSize);
List<String> communityIds = customerAgencyDao.getUsingCommunityList(customerId, orgId, CustomerOrgRedis.getOrgIdPath(orgId, orgType), null);
// List<String> communityIds = customerAgencyDao.getCommunitysByOrgIdPath(customerId, orgId, CustomerOrgRedis.getOrgIdPath(orgId, orgType));
// 填充组织信息
Map<String, String> communityMap = communityIds.stream().collect(Collectors.toMap(id -> id, id -> concatAgencyNamePath(id)));
List<SubUserHouseListResultDTO> communityUserHouseStats = houseUserChartList(communityIds, communityMap, "agency");
return new PageData<SubUserHouseListResultDTO>(communityUserHouseStats, new PageInfo<>(communityIds).getTotal());
}
public String concatAgencyNamePath(String agencyId) {
List<String> agencyNamePathList = new ArrayList();
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(agencyId);
if (agencyInfo == null) {
return null;
}
String pidsStr = agencyInfo.getPids();
if (StringUtils.isBlank(pidsStr)) {
// 没有pids,是顶级,直接返回
agencyNamePathList.add(agencyInfo.getOrganizationName());
return String.join("-", agencyNamePathList);
}
String[] pidList = pidsStr.split(":");
for (String pAgencyId : pidList) {
AgencyInfoCache pAgencyInfo = CustomerOrgRedis.getAgencyInfo(pAgencyId);
if (pAgencyInfo == null) {
continue;
}
agencyNamePathList.add(pAgencyInfo.getOrganizationName());
}
// 最后把自己加上
agencyNamePathList.add(agencyInfo.getOrganizationName());
return String.join("-", agencyNamePathList);
}
}

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

@ -1011,4 +1011,33 @@
LIMIT 1
</select>
<select id="getCommunitysByOrgIdPath" resultType="string">
select ca.ID
from customer_agency ca
where ca.CUSTOMER_ID=#{customerId}
and ca.LEVEL = 'community'
and ca.DEL_FLAG = 0
and (ca.ID = #{orgId} or ca.PIDS like CONCAT(#{orgIdPath},'%'))
order by ca.CREATED_TIME asc
</select>
<!--开通社区列表-->
<select id="getUsingCommunityList" resultType="string">
select t.ID
from (select ca.ID
, ca.CREATED_TIME created_time
, count(csa.ID) community_count
from customer_agency ca
inner join customer_staff_agency csa on (ca.ID = csa.AGENCY_ID and csa.DEL_FLAG = 0)
where ca.DEL_FLAG = 0
and ca.CUSTOMER_ID=#{customerId}
and ca.LEVEL = 'community'
<if test="endDate != null">
and csa.CREATED_TIME <![CDATA[<]]> #{endDate}
</if>
and (ca.ID = #{agencyId} or ca.PIDS like CONCAT(#{agencyOrgIdPath}, '%'))
group by ca.ID, ca.CREATED_TIME
having community_count > 0
order by created_time desc) t
</select>
</mapper>

2
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/IcEventListFormDTO.java

@ -1,7 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -28,6 +27,7 @@ public class IcEventListFormDTO implements Serializable {
private String icEventId;
/**
* 所属组织
* 前端传入如果没传默认查询登录用户所属组织及下级
*/
private String agencyId;
/**

8
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/IcEventServiceImpl.java

@ -112,9 +112,11 @@ public class IcEventServiceImpl extends BaseServiceImpl<IcEventDao, IcEventEntit
@Override
public PageData<IcEventListResultDTO> list(IcEventListFormDTO formDTO) {
//获取当前工作人员缓存信息
CustomerStaffInfoCacheResult staffInfo = getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
formDTO.setAgencyId(staffInfo.getAgencyId());
if(StringUtils.isBlank(formDTO.getAgencyId())){
//获取当前工作人员缓存信息
CustomerStaffInfoCacheResult staffInfo = getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
formDTO.setAgencyId(staffInfo.getAgencyId());
}
//分页查询当前组织下网格内事件数据
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage());

14
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java

@ -78,4 +78,18 @@ public class IcFormItemGroupDTO implements Serializable {
*/
private Boolean display;
/**
* 政策人员信息组件;1:展示0不展示默认0
*/
private String policyFlag;
/**
* 1展示0不展示默认0
*/
private String childShowFlag;
/**
* 组编码,唯一标识
*/
private String groupCode;
}

5
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormGroupDTO.java

@ -39,6 +39,11 @@ public class FormGroupDTO implements Serializable {
*/
private String tableName;
/**
*组编码,唯一标识
*/
private String groupCode;
/**
* 分组里面的组件
*/

3
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java

@ -52,9 +52,10 @@ public class IcFormController {
/**
* desc: 初始化 客户表单配置
* 运营端-数字社区初始化
*
* @param customerId
* @param formCode
* @param formCode value: resi_base_info
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.result.CustomerFormResultDTO>
* @author LiuJanJun
* @date 2021/12/8 4:28 下午

10
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormItemGroupEntity.java

@ -79,4 +79,14 @@ public class IcFormItemGroupEntity extends BaseEpmetEntity {
* 政策人员信息组件;1:展示0不展示默认0
*/
private String policyFlag;
/**
* 1展示0不展示默认0
*/
private String childShowFlag;
/**
* 组编码,唯一标识
*/
private String groupCode;
}

50
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java

@ -172,7 +172,7 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
defaultIcForm.setCreatedTime(new Date());
defaultIcForm.setUpdatedBy("init_user");
defaultIcForm.setUpdatedTime(new Date());
// 1、设置ic_form
int insert = baseDao.insert(defaultIcForm);
log.info("insert icForm:" + insert);
@ -184,7 +184,7 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
return "默认配置错误";
}
String defaultBaseInfoGroupId = "default_0";
//设置ic_form_item
//2、设置ic_form_item
itemList.forEach(item -> {
item.setId(newPrefixed + item.getId());
item.setCustomerId(customerId);
@ -215,7 +215,7 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
icFormItemDao.insert(item);
});
//设置ic_form_item_options
//3、设置ic_form_item_options
LambdaQueryWrapper<IcFormItemOptionsEntity> wrapperOptions = new LambdaQueryWrapper<>();
wrapperOptions.eq(IcFormItemOptionsEntity::getCustomerId, defaultCustomerId);
wrapperOptions.eq(IcFormItemOptionsEntity::getFormCode, formCode);
@ -233,7 +233,7 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
icFormItemOptionsDao.insert(item);
});
//设置ic_form_item_group
//4、设置ic_form_item_group
LambdaQueryWrapper<IcFormItemGroupEntity> wrapperGroup = new LambdaQueryWrapper<>();
wrapperGroup.eq(IcFormItemGroupEntity::getCustomerId, defaultCustomerId);
wrapperGroup.eq(IcFormItemGroupEntity::getFormCode, formCode);
@ -255,7 +255,7 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
icFormItemGroupDao.insert(item);
});
//设置ic_form_query_builder
//5、设置ic_form_query_builder
LambdaQueryWrapper<IcFormQueryBuilderEntity> wrapperQuery = new LambdaQueryWrapper<>();
wrapperQuery.eq(IcFormQueryBuilderEntity::getCustomerId, defaultCustomerId);
wrapperQuery.eq(IcFormQueryBuilderEntity::getFormCode, formCode);
@ -272,6 +272,26 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
icFormQueryBuilderDao.insert(item);
});
//6、设置ic_form_list_item
LambdaQueryWrapper<IcFormListItemEntity> listItemWapper = new LambdaQueryWrapper<>();
listItemWapper.eq(IcFormListItemEntity::getCustomerId, defaultCustomerId);
listItemWapper.eq(IcFormListItemEntity::getFormCode, formCode);
List<IcFormListItemEntity> listItemList = icFormListItemDao.selectList(listItemWapper);
if (CollectionUtils.isEmpty(listItemList)) {
return "默认配置错误";
}
listItemList.forEach(item -> {
item.setId(newPrefixed + item.getId());
item.setCustomerId(customerId);
item.setFormItemId(newPrefixed + item.getFormItemId());
item.setCreatedBy("init_user");
item.setCreatedTime(new Date());
item.setUpdatedBy("init_user");
item.setUpdatedTime(new Date());
log.debug("stats:"+ JSON.toJSONString(item));
icFormListItemDao.insert(item);
});
//设置ic_resi_category_stats_config
LambdaQueryWrapper<IcResiCategoryStatsConfigEntity> wrapperStats = new LambdaQueryWrapper<>();
wrapperStats.eq(IcResiCategoryStatsConfigEntity::getCustomerId, defaultCustomerId);
@ -302,26 +322,6 @@ public class IcFormServiceImpl extends BaseServiceImpl<IcFormDao, IcFormEntity>
icResiCategoryWarnConfigDao.insert(item);
});
//设置ic_form_list_item
LambdaQueryWrapper<IcFormListItemEntity> listItemWapper = new LambdaQueryWrapper<>();
listItemWapper.eq(IcFormListItemEntity::getCustomerId, defaultCustomerId);
listItemWapper.eq(IcFormListItemEntity::getFormCode, formCode);
List<IcFormListItemEntity> listItemList = icFormListItemDao.selectList(listItemWapper);
if (CollectionUtils.isEmpty(listItemList)) {
return "默认配置错误";
}
listItemList.forEach(item -> {
item.setId(newPrefixed + item.getId());
item.setCustomerId(customerId);
item.setFormItemId(newPrefixed + item.getFormItemId());
item.setCreatedBy("init_user");
item.setCreatedTime(new Date());
item.setUpdatedBy("init_user");
item.setUpdatedTime(new Date());
log.debug("stats:"+ JSON.toJSONString(item));
icFormListItemDao.insert(item);
});
//设置ic_service_item_dict和ic_resi_demand_dict
Result result = epmetHeartOpenFeignClient.customerInit(customerId);
if (!result.success()) {

56
epmet-module/oper-customize/oper-customize-server/src/main/resources/db/migration/V0.0.40__itemgroup_code.sql

@ -0,0 +1,56 @@
alter table ic_form_item_group add COLUMN GROUP_CODE VARCHAR(32) DEFAULT '' COMMENT '组编码,唯一标识' after CHILD_SHOW_FLAG;
update ic_form_item_group g set g.GROUP_CODE='jcxx'
where g.LABEL='基础信息';
update ic_form_item_group g set g.GROUP_CODE='jyxx'
where g.LABEL='教育信息';
update ic_form_item_group g set g.GROUP_CODE='xqah'
where g.LABEL='兴趣爱好';
update ic_form_item_group g set g.GROUP_CODE='zjxy'
where g.LABEL='宗教信仰';
update ic_form_item_group g set g.GROUP_CODE='jkxx'
where g.LABEL='健康信息';
update ic_form_item_group g set g.GROUP_CODE='gzxx'
where g.LABEL='工作信息';
update ic_form_item_group g set g.GROUP_CODE='jjzk'
where g.LABEL='经济状况';
update ic_form_item_group g set g.GROUP_CODE='jzxx'
where g.LABEL='居住信息';
update ic_form_item_group g set g.GROUP_CODE='jtxx'
where g.LABEL='家庭信息';
update ic_form_item_group g set g.GROUP_CODE='dyxx'
where g.LABEL='党员信息';
update ic_form_item_group g set g.GROUP_CODE='bzfxx'
where g.LABEL='保障房信息';
update ic_form_item_group g set g.GROUP_CODE='syxx'
where g.LABEL='失业信息';
update ic_form_item_group g set g.GROUP_CODE='tyjrxx'
where g.LABEL='退役军人信息';
update ic_form_item_group g set g.GROUP_CODE='zyzxx'
where g.LABEL='志愿者信息';
update ic_form_item_group g set g.GROUP_CODE='tsrqxx'
where g.LABEL='特殊人群信息';
update ic_form_item_group g set g.GROUP_CODE='tzry'
where g.LABEL='统战人员';
update ic_form_item_group g set g.GROUP_CODE='lnrxx'
where g.LABEL='老年人信息';
update ic_form_item_group g set g.GROUP_CODE='resi_demand'
where g.LABEL='居民需求信息';

7
epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml

@ -66,7 +66,8 @@
g.LABEL,
g.sort,
g.SUPPORT_ADD,
g.TABLE_NAME AS TABLE_NAME
g.TABLE_NAME AS TABLE_NAME,
g.GROUP_CODE
FROM
ic_form_item_group g
WHERE
@ -124,6 +125,7 @@
<result property="sort" column="sort"/>
<result property="supportAdd" column="SUPPORT_ADD"/>
<result property="tableName" column="TABLE_NAME"/>
<result property="groupCode" column="GROUP_CODE"/>
<collection property="itemList" ofType="com.epmet.dto.result.FormItemResult2"
column="group_id" select="com.epmet.dao.IcFormDao.selectItemListByGroupId">
</collection>
@ -200,7 +202,8 @@
case when g.table_name is null or g.table_name ='' then 'ic_resi_user'
else g.TABLE_NAME
end
) AS TABLE_NAME
) AS TABLE_NAME,
g.GROUP_CODE
FROM
ic_form_item_group g
WHERE

8
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java

@ -94,7 +94,7 @@ public class IcNatCompareRecordDTO implements Serializable {
* 最近一次核酸时间:接口填入
*/
@ColumnWidth(30)
@ExcelProperty("最近一次核酸时间")
@ExcelProperty("最近一次检测时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date latestNatTime;
@ -129,4 +129,10 @@ public class IcNatCompareRecordDTO implements Serializable {
@ColumnWidth(30)
@ExcelProperty("导入组织")
private String agencyName;
/**
* 内部备注开发人员用
*/
@ExcelIgnore
private String internalRemark;
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java

@ -107,6 +107,11 @@ public class IcNatDTO implements Serializable {
*/
private String attachmentUrl;
/**
* 试管编号
*/
private String testTubeCode;
/**
* 删除标识
*/

105
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcResiComparisonRecordDTO.java

@ -0,0 +1,105 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 居民信息与公安部信息比对记录表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-14
*/
@Data
public class IcResiComparisonRecordDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private String id;
/**
* 客户ID
*/
private String customerId;
/**
* ic_resi_user.id比对时的数据值
*/
private String resiId;
/**
* 数字社区人员姓名比对时的数据值
*/
private String resiName;
/**
* 数据社区身份证号比对时的数据值
*/
private String resiIdCard;
/**
* 公安部人员姓名
*/
private String policeName;
/**
* 公安部人员证件号
*/
private String policeIdCard;
/**
* 数据状态(0:未处理 1:已处理)
*/
private String type;
/**
* 信息一致性(0: 1: 2:-)2代表程序比对了没有匹配上
*/
private String identical;
/**
* 是否比对过(0: 1:)
*/
private String isComparison;
/**
* 比对结果说明
*/
private String comparisonResult;
/**
*
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

27
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTVaccineListDTO.java

@ -0,0 +1,27 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/11/11 15:05
*/
@Data
public class YTVaccineListDTO implements Serializable {
private static final long serialVersionUID = -5583350277850076659L;
private String cardno;
/**
* 接种时间
*/
private String inoculateDate;
/**
* 接种地点
*/
private String lastStationName;
}

4
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java

@ -89,6 +89,10 @@ public class AddIcNatFormDTO implements Serializable {
* 附件地址
*/
private String attachmentUrl;
/**
* 试管编号
*/
private String testTubeCode;
/**
* 是否客户下居民(0: 1:)
*/

33
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ComparisonFormDTO.java

@ -0,0 +1,33 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Data
public class ComparisonFormDTO extends PageFormDTO {
private static final long serialVersionUID = 9156247659994638103L;
public interface Update extends CustomerClientShowGroup {
}
/**
* 居民Id集合
*/
private List<String> userIdList;
/**
* 比对记录Id
*/
@NotBlank(message = "比对记录Id不能为空", groups = {Update.class})
private String comparisonRecordId;
/**
* token里设置
*/
private String customerId;
private String userId;
private String agencyId;
}

6
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java

@ -49,4 +49,10 @@ public class DataSyncTaskParam implements Serializable {
private String dataCode;
private String staffId;
/**
* nat核酸检测
* vaccine疫苗接种
*/
private String jobType;
}

32
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RHZKStatisticsFormDTO.java

@ -0,0 +1,32 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author zxc
* @DateTime 2022/11/16 13:26
*/
@Data
public class RHZKStatisticsFormDTO implements Serializable {
private static final long serialVersionUID = -4474168123286467820L;
private String orgId;
/**
* grid网格village小区
*/
private String orgType;
/**
* /epmetuser/icresiuser/rhzkList调用会赋值
*/
private List<String> orgIds;
//tokenDto中获取
private String staffId;
private String customerId;
}

39
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ResiComparisonListFormDTO.java

@ -0,0 +1,39 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import lombok.Data;
/**
* @Description 数据比对列表-接口入参
* @Author sun
*/
@Data
public class ResiComparisonListFormDTO extends PageFormDTO {
private static final long serialVersionUID = 9156247659994638103L;
/**
* 信息一致性(0: 1: 2:-)2代表程序比对了没有匹配上
*/
private String identical;
/**
* 数据状态(0:未处理 1:已处理)
*/
private String type;
/**
* 身份证号
*/
private String idCard;
private Integer pageNo = 1;
private Integer pageSize = 20;
private Boolean isPage = true;
/**
* token里设置
*/
private String customerId;
private String userId;
private String agencyId;
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserChartFormDTO.java

@ -27,6 +27,11 @@ public class UserChartFormDTO implements Serializable {
*/
private String type;
/**
* 人户一致:rhyz人在户不在rzhbz户在人不在hzrbz暂不清楚no全部all
*/
private String rhType;
private Integer pageNo = 1;
private Integer pageSize = 20;
private Boolean isPage = true;

20
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ComparisonResultDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
@Data
public class ComparisonResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 是否存在异常
*/
private Boolean result = false;
/**
* 接口反馈说明
*/
private String resultExplain;
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/MyNatListResultDTO.java

@ -73,4 +73,9 @@ public class MyNatListResultDTO implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private Date reportTime;
/**
* 试管编号
*/
private String testTubeCode;
}

13
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java

@ -73,14 +73,14 @@ public class NatListResultDTO implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
@ColumnWidth(25)
@ExcelProperty(value = "采样时间",order = 4)
@ExcelProperty(value = "采样时间",order = 5)
private Date sampleTime;
/**
* 检测结果
*/
@ColumnWidth(20)
@ExcelProperty(value = "检测结果",order = 5)
@ExcelProperty(value = "检测结果",order = 7)
private String natResult;
/**
@ -99,8 +99,15 @@ public class NatListResultDTO implements Serializable {
* 检测地点
*/
@ColumnWidth(30)
@ExcelProperty(value = "检测地点",order = 7)
@ExcelProperty(value = "检测地点",order = 6)
private String natAddress;
/**
* 试管编号
*/
@ColumnWidth(30)
@ExcelProperty(value = "试管编号",order = 8)
private String testTubeCode;
}

2
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatUserInfoResultDTO.java

@ -29,6 +29,8 @@ public class NatUserInfoResultDTO implements Serializable {
private String name;
private String mobile;
/**
* 18大类 某一类的 是否值用于比较 同步数据结果确定是否要插入到表中
*/

5
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/OwnerRelationResultDTO.java

@ -25,5 +25,10 @@ public class OwnerRelationResultDTO implements Serializable {
private String userName;
private String isSelf;
private String relation;
/**
* 2022.11.17人户状况人户一致人在户不在户在人不在暂不清楚
*/
private String renHuCondition;
}
}

38
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RHZKStatisticsResultDTO.java

@ -0,0 +1,38 @@
package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Author zxc
* @DateTime 2022/11/16 09:15
*/
@Data
public class RHZKStatisticsResultDTO implements Serializable {
private static final long serialVersionUID = 6493812449146476415L;
private Integer userTotal = NumConstant.ZERO;
/**
* 人户一致人在户不在户在人不在
* 为空的 暂不清楚
*/
private Integer rhyzUserTotal = NumConstant.ZERO;
private BigDecimal rhyzUserRatio = NumConstant.ZERO_DECIMAL;
private Integer rzhbzUserTotal = NumConstant.ZERO;
private BigDecimal rzhbzUserRatio = NumConstant.ZERO_DECIMAL;
private Integer hzrbzUserTotal = NumConstant.ZERO;
private BigDecimal hzrbzUserRatio = NumConstant.ZERO_DECIMAL;
private Integer zbqcUserTotal = NumConstant.ZERO;
private BigDecimal zbqcUserRatio = NumConstant.ZERO_DECIMAL;
private String orgId;
@JsonIgnore
private Integer total;
@JsonIgnore
private String rhzk;
}

70
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ResiComparisonListResultDTO.java

@ -0,0 +1,70 @@
package com.epmet.dto.result;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 数据比对列表-接口返参
* @Author sun
*/
@Data
public class ResiComparisonListResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 比对记录表Id
*/
private String comparisonRecordId;
/**
* ic_resi_user.id比对时的数据值
*/
private String resiId;
/**
* 居民库姓名
*/
private String resiName;
/**
* 居民库证件号
*/
private String resiIdCard;
/**
* 公安部人员姓名
*/
private String policeName;
/**
* 公安部人员证件号
*/
private String policeIdCard;
/**
* 数据状态(0:未处理 1:已处理)
*/
private String type;
private String typeName;
/**
* 信息一致性(0: 1: 2:-)2代表程序比对了没有匹配上
*/
private String identical;
private String identicalName;
/**
* 是否比对过(0: 1:)
*/
private String isComparison;
private String isComparisonName;
/**
* 比对结果说明
*/
private String comparisonResult;
}

13
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserChartResultDTO.java

@ -40,6 +40,19 @@ public class UserChartResultDTO implements Serializable {
*/
private Double ldUserRatio = 0.0;
/**
* 用户总数-较上月
*/
private Integer userTotalJSY;
/**
* 常住用户-较上月
*/
private Integer czUserTotalJSY;
/**
* 流动人口-较上月
*/
private Integer ldUserTotalJSY;
@JsonIgnore
private Integer num;
//是否是流动人口【是:1 否:0】

7
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java

@ -952,4 +952,11 @@ public interface EpmetUserOpenFeignClient {
@PostMapping("/epmetuser/dataSyncConfig/disabilityInfoScanTask")
Result disabilityInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
@PostMapping("/epmetuser/dataSyncConfig/vaccineInfoScanTask")
Result vaccineInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
@PostMapping("/epmetuser/icresiuser/rhzkList")
Result<List<RHZKStatisticsResultDTO>> renHuCondition(@RequestBody RHZKStatisticsFormDTO formDTO);
}

10
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

@ -741,4 +741,14 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result disabilityInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "disabilityInfoScanTask", formDTO);
}
@Override
public Result vaccineInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "vaccineInfoScanTask", formDTO);
}
@Override
public Result<List<RHZKStatisticsResultDTO>> renHuCondition(RHZKStatisticsFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "renHuCondition", formDTO);
}
}

10
epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java

@ -7,12 +7,22 @@ public interface EpidemicConstant {
* 核酸检测
* 残疾人
* 死亡
* 疫苗接种
*/
String DATA_CODE_NAT = "hesuan";
String DATA_CODE_DISABILITY = "canji";
String DATA_CODE_DEATH = "siwang";
String DATA_CODE_VACCINE = "yimiaojiezhong";
/**
* ic_sync_job 任务类型
* 核酸检测
* 疫苗接种
*/
String JOB_TYPE_NAT = "nat";
String JOB_TYPE_VACCINE = "vaccine";
// 居民信息对比
String JOB_TYPE_COMPARISON_RESI = "comparison_resi";
String OPERATION_STATUS_WAITING = "waiting";
String OPERATION_STATUS_PROCESSING = "processing";

9
epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java

@ -108,4 +108,13 @@ public interface UserConstant {
* 居民信息 子表中的主表id
*/
String IC_RESI_USER = "IC_RESI_USER";
/**
* 人户一致人在户不在户在人不在
* 为空的 暂不清楚
*/
String R_H_Y_Z = "rhyz";
String R_Z_H_B_Z = "rzhbz";
String H_Z_R_B_Z = "hzrbz";
String Z_B_Q_C = "";
}

26
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java

@ -124,11 +124,19 @@ public class DataSyncConfigController {
return new Result();
}
@PostMapping("natInfoSyncButton")
public Result natInfoSyncButton(@RequestBody DataSyncTaskParam formDTO, @LoginUser TokenDto tokenDto){
/**
* 提交同步任务(核酸疫苗身份一致性验证)
* @author wxz
* @date 2022/11/15 下午1:37
* @param formDTO
* @param tokenDto
* @return Result
*/
@PostMapping("submitSyncJob")
public Result submitSyncJob(@RequestBody DataSyncTaskParam formDTO, @LoginUser TokenDto tokenDto){
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setStaffId(tokenDto.getUserId());
dataSyncConfigService.natInfoSyncButton(formDTO);
dataSyncConfigService.submitSyncJob(formDTO);
return new Result();
}
@ -156,4 +164,16 @@ public class DataSyncConfigController {
return new Result();
}
/**
* @Description 疫苗接种信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/11 16:56
*/
@PostMapping("vaccineInfoScanTask")
public Result vaccineInfoScanTask(@RequestBody DataSyncTaskParam formDTO){
dataSyncConfigService.vaccineInfoScanTask(formDTO);
return new Result();
}
}

136
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiComparisonRecordController.java

@ -0,0 +1,136 @@
package com.epmet.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.MaskResponse;
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.exception.EpmetException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.ComparisonFormDTO;
import com.epmet.dto.form.ResiComparisonListFormDTO;
import com.epmet.dto.result.ComparisonResultDTO;
import com.epmet.dto.result.ResiComparisonListResultDTO;
import com.epmet.excel.IcResiComparisonRecordExcel;
import com.epmet.service.IcResiComparisonRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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 javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;
/**
* 居民信息与公安部信息比对记录表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-14
*/
@Slf4j
@RestController
@RequestMapping("icResiComparisonRecord")
public class IcResiComparisonRecordController implements ResultDataResolver {
@Autowired
private IcResiComparisonRecordService icResiComparisonRecordService;
/**
* @Author sun
* @Description 数据比对列表
**/
@PostMapping("resiComparisonList")
@MaskResponse(fieldNames = {"resiIdCard", "policeIdCard"}, fieldsMaskType = {MaskResponse.MASK_TYPE_MOBILE, MaskResponse.MASK_TYPE_ID_CARD})
public Result<PageData<ResiComparisonListResultDTO>> resiComparisonList(@LoginUser TokenDto tokenDto, @RequestBody ResiComparisonListFormDTO formDTO) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
return new Result<PageData<ResiComparisonListResultDTO>>().ok(icResiComparisonRecordService.resiComparisonList(formDTO));
}
/**
* @Author sun
* @Description 比对批量比对组织及下级比对
**/
@PostMapping("comparison")
public Result<ComparisonResultDTO> comparison(@LoginUser TokenDto tokenDto, @RequestBody ComparisonFormDTO formDTO) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
return new Result<ComparisonResultDTO>().ok(icResiComparisonRecordService.comparison(formDTO));
}
/**
* @Author sun
* @Description 比对后的更新
**/
@PostMapping("comparisonUpdate")
public Result comparisonUpdate(@LoginUser TokenDto tokenDto, @RequestBody ComparisonFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, ComparisonFormDTO.Update.class);
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
icResiComparisonRecordService.comparisonUpdate(formDTO);
return new Result();
}
/**
* @Author sun
* @Description 比对记录数据导出
**/
@NoRepeatSubmit
@PostMapping("export")
public void export(@LoginUser TokenDto tokenDto, @RequestBody ResiComparisonListFormDTO formDTO, HttpServletResponse response) throws IOException {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
formDTO.setIsPage(false);
ExcelWriter excelWriter = null;
formDTO.setPageNo(NumConstant.ONE);
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
try {
String fileName = "比对记录" + DateUtils.format(new Date()) + ".xlsx";
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcResiComparisonRecordExcel.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build();
PageData<ResiComparisonListResultDTO> data = null;
List<IcResiComparisonRecordExcel> list = null;
do {
data = icResiComparisonRecordService.resiComparisonList(formDTO);
list = ConvertUtils.sourceToTarget(data.getList(), IcResiComparisonRecordExcel.class);
formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE);
excelWriter.write(list, writeSheet);
} while (CollectionUtils.isNotEmpty(list) && list.size() == formDTO.getPageSize());
} catch (EpmetException e) {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "application/json; charset=UTF-8");
PrintWriter printWriter = response.getWriter();
Result<Object> result = new Result<>().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), e.getMsg());
printWriter.write(JSON.toJSONString(result));
printWriter.close();
} catch (Exception e) {
log.error("export exception", e);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
}

18
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java

@ -1465,4 +1465,22 @@ public class IcResiUserController implements ResultDataResolver {
return new Result<IcResiUserInfoCache>().ok(icResiUserService.getIcResiUserInfo(userId));
}
/**
* @Description 人户状况统计查询
* @param tokenDto
* @Author zxc
* @Date 2022/11/16 09:22
*/
@PostMapping("rhzk")
public Result<RHZKStatisticsResultDTO> renHuCondition(@LoginUser TokenDto tokenDto,@RequestBody RHZKStatisticsFormDTO formDTO){
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setStaffId(tokenDto.getUserId());
return new Result<RHZKStatisticsResultDTO>().ok(icResiUserService.renHuCondition(formDTO));
}
@PostMapping("rhzkList")
public Result<List<RHZKStatisticsResultDTO>> renHuConditionList(@RequestBody RHZKStatisticsFormDTO formDTO){
return new Result<List<RHZKStatisticsResultDTO>>().ok(icResiUserService.renHuConditionList(formDTO));
}
}

44
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiComparisonRecordDao.java

@ -0,0 +1,44 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.ComparisonFormDTO;
import com.epmet.dto.form.ResiComparisonListFormDTO;
import com.epmet.dto.result.ResiComparisonListResultDTO;
import com.epmet.entity.IcResiComparisonRecordEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 居民信息与公安部信息比对记录表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-14
*/
@Mapper
public interface IcResiComparisonRecordDao extends BaseDao<IcResiComparisonRecordEntity> {
List<ResiComparisonListResultDTO> getResiComparisonList(ResiComparisonListFormDTO formDTO);
void saveInsert(@Param("list") List<IcResiComparisonRecordEntity> recordEntity);
List<IcResiComparisonRecordEntity> getComparisonList(ComparisonFormDTO formDTO);
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -19,6 +19,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.commons.tools.dto.result.OptionDataResultDTO;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.IcResiUserConfirmDTO;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.IcVolunteerPolyDTO;
@ -439,4 +440,8 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
* @Date 2022/10/24 15:47
*/
ResiAndLocalResiResultDTO getResiCount(@Param("agencyId")String agencyId,@Param("idCard")String idCard,@Param("customerId")String customerId);
List<IcResiUserDTO> getResiUserList(ComparisonFormDTO formDTO);
List<RHZKStatisticsResultDTO> getUserByRenHu(RHZKStatisticsFormDTO formDTO);
}

9
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java

@ -3,6 +3,7 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IcNatDTO;
import com.epmet.dto.IcVaccineDTO;
import com.epmet.dto.YTVaccineListDTO;
import com.epmet.dto.form.MyNatListFormDTO;
import com.epmet.dto.form.VaccineListFormDTO;
import com.epmet.dto.result.IcVaccineListResultDTO;
@ -78,4 +79,12 @@ public interface IcVaccineDao extends BaseDao<IcVaccineEntity> {
void updateRelation(List<RelationAndNatResultDTO> list);
void updateRelationOther(@Param("isLocalResiUser") String isLocalResiUser);
/**
* @Description 根据 身份证 + 疫苗接种时间 查询库里存在的
* @param list
* @Author zxc
* @Date 2022/11/11 15:11
*/
List<YTVaccineListDTO> getExistVaccine(@Param("list")List<YTVaccineListDTO> list);
}

49
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatCompareRecordEntity.java

@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 核酸比对记录
*
@ -21,47 +22,47 @@ public class IcNatCompareRecordEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
private String customerId;
/**
* 姓名
*/
/**
* 姓名
*/
private String name;
/**
* 身份证
*/
/**
* 身份证
*/
private String idCard;
/**
* 手机号
*/
/**
* 手机号
*/
private String mobile;
/**
* 是否客户下居民(0: 1:)
*/
/**
* 是否客户下居民(0: 1:)
*/
private String isResiUser;
/**
* 是否客户下居民ic_resi_user.id
*/
/**
* 是否客户下居民ic_resi_user.id
*/
private String icResiUserId;
/**
* 最近一次采样时间:接口填入
*/
private Date latestCyTime;
/**
* 最近一次核酸时间:接口填入
*/
/**
* 最近一次核酸时间:接口填入
*/
private Date latestNatTime;
/**
* 检测结果(0:阴性 1:阳性):接口填入
*/
/**
* 检测结果(0:阴性 1:阳性):接口填入
*/
private String natResult;
/**
* 检测地点:接口填入
*/
/**
* 检测地点:接口填入
*/
private String natAddress;
/**
* 联系地址接口填入

5
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java

@ -94,6 +94,11 @@ public class IcNatEntity extends BaseEpmetEntity {
*/
private String attachmentUrl;
/**
* 试管编号
*/
private String testTubeCode;
@TableField(exist = false)
private String agencyId;

71
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiComparisonRecordEntity.java

@ -0,0 +1,71 @@
package com.epmet.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-05-10
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_resi_comparison_record")
public class IcResiComparisonRecordEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户ID
*/
private String customerId;
/**
* ic_resi_user.id比对时的数据值
*/
private String resiId;
/**
* 数字社区人员姓名比对时的数据值
*/
private String resiName;
/**
* 数据社区身份证号比对时的数据值
*/
private String resiIdCard;
/**
* 公安部人员姓名
*/
private String policeName;
/**
* 公安部人员证件号
*/
private String policeIdCard;
/**
* 数据状态(0:未处理 1:已处理)
*/
private String type;
/**
* 信息一致性(0: 1: 2:-)2代表程序比对了没有匹配上
*/
private String identical;
/**
* 是否比对过(0: 1:)
*/
private String isComparison;
/**
* 比对结果说明
*/
private String comparisonResult;
}

8
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcVaccineEntity.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -61,6 +62,7 @@ public class IcVaccineEntity extends BaseEpmetEntity {
/**
* 接种时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date inoculateTime;
/**
@ -93,4 +95,10 @@ public class IcVaccineEntity extends BaseEpmetEntity {
*/
private String remark;
@TableField(exist = false)
private String agencyId;
@TableField(exist = false)
private String pids;
}

1
epmet-user/epmet-user-server/src/main/java/com/epmet/enums/DataSyncEnum.java

@ -12,6 +12,7 @@ public enum DataSyncEnum {
HE_SUAN("hesuan", "核酸检测数据"),
CAN_JI("canji", "残疾数据"),
SI_WANG("siwang", "死亡数据"),
VACCINE("yimiaojiezhong", "疫苗接种"),
OTHER("qita","其他"),
;

55
epmet-user/epmet-user-server/src/main/java/com/epmet/enums/RenHuConditionEnum.java

@ -0,0 +1,55 @@
package com.epmet.enums;
import org.apache.commons.lang3.StringUtils;
/**
* 居民信息里的人户状况枚举类
*/
public enum RenHuConditionEnum {
/**
* 人户一致人在户不在户在人不在
* 为空的 暂不清楚
*/
RHYZ("rhyz","人户一致"),
RZHBZ("rzhbz","人在户不在"),
HZRBZ("hzrbz","户在人不在"),
ZBQC("","暂不清楚"),
;
private String code;
private String name;
public static String getNameByCode(String code){
if (StringUtils.isBlank(code)){
return ZBQC.name;
}
for (RenHuConditionEnum e : values()) {
if (e.getCode().equals(code)){
return e.getName();
}
}
return ZBQC.name;
}
RenHuConditionEnum(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

64
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcResiComparisonRecordExcel.java

@ -0,0 +1,64 @@
package com.epmet.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.Data;
import java.io.Serializable;
/**
* 比对记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-14
*/
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44)
@Data
public class IcResiComparisonRecordExcel implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 居民库姓名
*/
@ExcelProperty(value = "居民库-姓名")
@ColumnWidth(15)
private String resiName;
/**
* 居民库证件号
*/
@ExcelProperty(value = "居民库-证件号")
@ColumnWidth(20)
private String resiIdCard;
/**
* 公安部人员姓名
*/
@ExcelProperty(value = "公安-姓名")
@ColumnWidth(15)
private String policeName;
/**
* 公安部人员证件号
*/
@ExcelProperty(value = "公安-证件号")
@ColumnWidth(20)
private String policeIdCard;
/**
* 数据状态(0:未处理 1:已处理)
*/
@ExcelProperty(value = "状态")
@ColumnWidth(12)
private String typeName;
/**
* 信息一致性(0: 1: 2:-)2代表程序比对了没有匹配上
*/
@ExcelProperty(value = "信息一致")
@ColumnWidth(12)
private String identicalName;
}

3
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java

@ -43,6 +43,9 @@ public class IcNatImportExcelData {
@ExcelProperty("检测结果")
private String natResultZh;
@ExcelProperty("试管编号")
private String testTubeCode;
@Data
public static class RowRemarkMessage {

14
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java

@ -171,6 +171,7 @@ public class IcNatCompareRecordExcelImportListener implements ReadListener<IcNat
ObjectUtil.objectToTrim(data);
IcNatCompareRecordEntity compareRecordEntity = ConvertUtils.sourceToTarget(data, IcNatCompareRecordEntity.class);
compareRecordEntity.setCustomerId(customerId);
compareRecordEntity.setLatestCyTime(null);
compareRecordEntity.setLatestNatTime(null);
compareRecordEntity.setNatAddress(StrConstant.EPMETY_STR);
compareRecordEntity.setNatResult(StrConstant.EPMETY_STR);
@ -228,17 +229,24 @@ public class IcNatCompareRecordExcelImportListener implements ReadListener<IcNat
compareRecordEntity.setNatResult(NumConstant.ZERO_STR);
}
compareRecordEntity.setContactAddress(StringUtils.isNotBlank(address) ? address : StrConstant.EPMETY_STR);
compareRecordEntity.setInternalRemark(String.format("%s查询匹配成功,采样时间一致,采样视图最近一次采样时间:%s,检测结果视图的最近一次采样时间:%s",
DateUtils.format(importTime,DateUtils.DATE_TIME_PATTERN),
DateUtils.format(compareRecordEntity.getLatestCyTime(),DateUtils.DATE_TIME_PATTERN),
DateUtils.format(sample_time,DateUtils.DATE_TIME_PATTERN)));
} else {
// 采样时间不一致,说明未出结果
compareRecordEntity.setInternalRemark(String.format("采样时间不一致,采样视图最近一次采样时间:%s,检测结果视图的最近一次采样时间:%s", compareRecordEntity.getLatestCyTime(), DateUtils.format(sample_time)));
compareRecordEntity.setInternalRemark(String.format("%s查询未出结果,采样时间不一致,采样视图最近一次采样时间:%s,检测结果视图的最近一次采样时间:%s",
DateUtils.format(importTime,DateUtils.DATE_TIME_PATTERN),
DateUtils.format(compareRecordEntity.getLatestCyTime(),DateUtils.DATE_TIME_PATTERN),
DateUtils.format(sample_time,DateUtils.DATE_TIME_PATTERN)));
}
} else {
compareRecordEntity.setInternalRemark("最近一次检测结果为空");
compareRecordEntity.setInternalRemark(String.format("%s查询最近一次检测结果为空", DateUtils.format(importTime,DateUtils.DATE_TIME_PATTERN)));
}
}
} else {
// 没有核酸采样记录
compareRecordEntity.setInternalRemark("最近一次采样结果为空");
compareRecordEntity.setInternalRemark(String.format("%s查询最近一次采样结果为空", DateUtils.format(importTime, DateUtils.DATE_TIME_PATTERN)));
}
}
datas.add(compareRecordEntity);

119
epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java

@ -0,0 +1,119 @@
package com.epmet.processor;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.IcSyncJobDao;
import com.epmet.entity.IcSyncJobEntity;
import com.epmet.service.IcResiComparisonRecordService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @Description 居民一致性对比任务处理器
* @Author wxz
* @Date 2022/11/15 下午5:54
*/
@Component
@Slf4j
public class YanTaiResiComparisonSyncProcessor {
public static final int MAX_EXECUTING_COUNT = 3;
@Autowired
private ExecutorService executorService;
@Autowired
private IcSyncJobDao icSyncJobDao;
@Autowired
private IcResiComparisonRecordService icResiComparisonRecordService;
@Autowired
private DistributedLock distributedLock;
@Autowired
RedisUtils redisUtils;
/**
* 定时扫描和执行同步任务
* 10s扫一次库
*/
@Scheduled(cron = "0/10 * * * * ? ")
public void scanJobs() {
//log.info("【异步数据更新】开始同步任务");
LambdaQueryWrapper<IcSyncJobEntity> executingListQuery = new LambdaQueryWrapper<>();
executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING);
List<IcSyncJobEntity> executingJobList = icSyncJobDao.selectList(executingListQuery);
if (!CollectionUtils.isEmpty(executingJobList) && executingJobList.size() >= MAX_EXECUTING_COUNT) {
// 最多只允许同时3条线程运行
return;
}
int executingCount = executingJobList.size();
// 还可以运行几条线程
int leftCount = MAX_EXECUTING_COUNT - executingCount;
RLock lock = null;
try {
lock = distributedLock.getLock("data:sync:comparison:resi", 60L, 60L, TimeUnit.SECONDS);
// 查询可执行的任务列表,并且异步执行
List<IcSyncJobEntity> icSyncJobToExec = icSyncJobDao.selectExecutableJobList(
EpidemicConstant.JOB_TYPE_COMPARISON_RESI,
leftCount);
if (!CollectionUtils.isEmpty(icSyncJobToExec)) {
// 异步提交任务
for (IcSyncJobEntity jobEntity : icSyncJobToExec) {
updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_PROCESSING);
executorService.submit(() -> {
// 将此任务状态修改为执行中
try {
icResiComparisonRecordService.comparisonUserData(jobEntity);
} finally {
// 更新任务状态为结束
updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_FINISH);
}
});
}
}
} catch (Exception e) {
log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e));
} finally {
if (lock != null) {
lock.unlock();
}
}
}
/**
* 更新任务状态
* @param id
* @param status
*/
private void updateJobStatus(String id, String status) {
LambdaQueryWrapper<IcSyncJobEntity> query = new LambdaQueryWrapper<>();
query.eq(IcSyncJobEntity::getId, id);
IcSyncJobEntity updateEntity = new IcSyncJobEntity();
updateEntity.setOperationStatus(status);
icSyncJobDao.update(updateEntity, query);
}
}

112
epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java

@ -0,0 +1,112 @@
package com.epmet.processor;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.IcSyncJobDao;
import com.epmet.entity.IcSyncJobEntity;
import com.epmet.service.DataSyncConfigService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import static com.epmet.constant.EpidemicConstant.JOB_TYPE_NAT;
import static com.epmet.constant.EpidemicConstant.JOB_TYPE_VACCINE;
// 烟台核酸检测数据同步处理器
@Component
@Slf4j
public class YanTaiVaccineSyncProcessor {
public static final int MAX_EXECUTING_COUNT = 3;
@Autowired
private ExecutorService executorService;
@Autowired
private IcSyncJobDao icSyncJobDao;
@Autowired
private DataSyncConfigService dataSyncConfigService;
@Autowired
private DistributedLock distributedLock;
@Autowired
RedisUtils redisUtils;
/**
* @Description 定时扫描和执行同步任务疫苗接种
* @Author zxc
* @Date 2022/11/11 10:32
*/
@Scheduled(cron = "0/10 * * * * ? ")
public void scanJobs() {
LambdaQueryWrapper<IcSyncJobEntity> executingListQuery = new LambdaQueryWrapper<>();
executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING);
List<IcSyncJobEntity> executingJobList = icSyncJobDao.selectList(executingListQuery);
if (!CollectionUtils.isEmpty(executingJobList) && executingJobList.size() >= MAX_EXECUTING_COUNT) {
// 最多只允许同时3条线程运行
return;
}
int executingCount = executingJobList.size();
// 还可以运行几条线程
int leftCount = MAX_EXECUTING_COUNT - executingCount;
RLock lock = null;
try {
lock = distributedLock.getLock("data:sync:" + JOB_TYPE_VACCINE, 60L, 60L, TimeUnit.SECONDS);
// 查询可执行的任务列表,并且异步执行
List<IcSyncJobEntity> icSyncJobToExec = icSyncJobDao.selectExecutableJobList(
EpidemicConstant.JOB_TYPE_VACCINE,
leftCount);
if (!CollectionUtils.isEmpty(icSyncJobToExec)) {
// 异步提交任务
for (IcSyncJobEntity jobEntity : icSyncJobToExec) {
updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_PROCESSING);
executorService.submit(() -> {
// 将此任务状态修改为执行中
try {
dataSyncConfigService.execSyncByJobProcessor(jobEntity);
} finally {
// 更新任务状态为结束
updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_FINISH);
}
});
}
}
} catch (Exception e) {
log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e));
} finally {
if (lock != null) {
lock.unlock();
}
}
}
/**
* 更新任务状态
* @author wxz
* @date 2022/11/8 下午8:25
* @param id
* @param status
*/
private void updateJobStatus(String id, String status) {
LambdaQueryWrapper<IcSyncJobEntity> query = new LambdaQueryWrapper<>();
query.eq(IcSyncJobEntity::getId, id);
IcSyncJobEntity updateEntity = new IcSyncJobEntity();
updateEntity.setOperationStatus(status);
icSyncJobDao.update(updateEntity, query);
}
}

13
epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java

@ -112,7 +112,7 @@ public interface DataSyncConfigService extends BaseService<DataSyncConfigEntity>
*/
void natInfoScanTask(DataSyncTaskParam formDTO);
void natInfoSyncButton(DataSyncTaskParam formDTO);
void submitSyncJob(DataSyncTaskParam formDTO);
List<NatUserInfoResultDTO> getNatUserInfoFromDb(DataSyncTaskParam formDTO, int pageNo, int pageSize);
@ -121,8 +121,9 @@ public interface DataSyncConfigService extends BaseService<DataSyncConfigEntity>
* @param resiInfos
* @param customerId
* @param isSync
* @param jobType
*/
void yantaiHsjcByDbView(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync);
void yanTaiDbViewByType(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync, String jobType);
/**
* 更新居民核酸检测信息(通过任务处理器)
@ -133,4 +134,12 @@ public interface DataSyncConfigService extends BaseService<DataSyncConfigEntity>
*/
void execSyncByJobProcessor(IcSyncJobEntity jobEntity);
/**
* @Description 疫苗接种信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/11 16:56
*/
void vaccineInfoScanTask(DataSyncTaskParam formDTO);
}

27
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiComparisonRecordService.java

@ -0,0 +1,27 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.form.ComparisonFormDTO;
import com.epmet.dto.form.ResiComparisonListFormDTO;
import com.epmet.dto.result.ComparisonResultDTO;
import com.epmet.dto.result.ResiComparisonListResultDTO;
import com.epmet.entity.IcResiComparisonRecordEntity;
import com.epmet.entity.IcSyncJobEntity;
/**
* 居民信息与公安部信息比对记录表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-14
*/
public interface IcResiComparisonRecordService extends BaseService<IcResiComparisonRecordEntity> {
PageData<ResiComparisonListResultDTO> resiComparisonList(ResiComparisonListFormDTO formDTO);
ComparisonResultDTO comparison(ComparisonFormDTO formDTO);
void comparisonUserData(IcSyncJobEntity jobEntity);
void comparisonUpdate(ComparisonFormDTO formDTO);
}

11
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java

@ -525,4 +525,15 @@ public interface IcResiUserService extends BaseService<IcResiUserEntity> {
IcResiUserInfoCache getIcResiUserInfo(String userId);
void epidemicPreventionExport(EpidemicPreventionFormDTO formDTO, HttpServletResponse response) throws IOException;
/**
* @Description 人户状况统计查询
* @param formDTO
* @Author zxc
* @Date 2022/11/16 09:22
*/
RHZKStatisticsResultDTO renHuCondition(RHZKStatisticsFormDTO formDTO);
List<RHZKStatisticsResultDTO> renHuConditionList(RHZKStatisticsFormDTO formDTO);
}

285
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java

@ -2,6 +2,7 @@ package com.epmet.service.impl;
import java.util.Date;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -11,7 +12,6 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.YtDataSyncResDTO;
import com.epmet.commons.tools.dto.result.YtHscyResDTO;
import com.epmet.commons.tools.dto.result.YtHsjcResDTO;
@ -21,7 +21,6 @@ import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
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.security.dto.TokenDto;
@ -32,9 +31,11 @@ import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.DataSyncConfigDao;
import com.epmet.dao.IcNatDao;
import com.epmet.dao.IcSyncJobDao;
import com.epmet.dao.IcVaccineDao;
import com.epmet.dto.DataSyncConfigDTO;
import com.epmet.dto.DataSyncRecordDeathDTO;
import com.epmet.dto.DataSyncRecordDisabilityDTO;
import com.epmet.dto.YTVaccineListDTO;
import com.epmet.dto.form.ConfigSwitchFormDTO;
import com.epmet.dto.form.DataSyncTaskParam;
import com.epmet.dto.form.ScopeSaveFormDTO;
@ -48,7 +49,6 @@ 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.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@ -59,8 +59,9 @@ import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.epmet.constant.EpidemicConstant.*;
@ -75,6 +76,9 @@ import static com.epmet.constant.EpidemicConstant.*;
@Service
public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao, DataSyncConfigEntity> implements DataSyncConfigService {
//2022-01-05 08:53:26
public static final Pattern VACCINE_DATE_OF_API_PATTERN = Pattern.compile("^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}):\\d{2}");
@Autowired
private DataSyncScopeService dataSyncScopeService;
@Autowired
@ -95,6 +99,12 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
private IcSyncJobDao icSyncJobDao;
@Autowired
private DistributedLock distributedLock;
@Autowired
private IcVaccineService icVaccineService;
@Autowired
private IcVaccineRelationService icVaccineRelationService;
@Autowired
private IcVaccineDao icVaccineDao;
@Resource(name = "yantaiNamedParamLantuJdbcTemplate")
private NamedParameterJdbcTemplate yantaiNamedParamLantuJdbcTemplate;
@ -378,7 +388,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
case HE_SUAN:
try {
//查询正常状态的居民
yantaiHsjcByDbView(dbResiList, config.getCustomerId(), formDTO.getIsSync());
yanTaiDbViewByType(dbResiList, config.getCustomerId(), formDTO.getIsSync(), JOB_TYPE_NAT);
log.info("======核酸检测信息拉取结束======");
} catch (Exception e) {
log.error("nat thread execute exception", e);
@ -393,7 +403,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
if (CollectionUtils.isEmpty(dbResiList)){
return;
}
yantaiHsjcByDbView(dbResiList, dbResiList.get(NumConstant.ZERO).getCustomerId(), formDTO.getIsSync());
yanTaiDbViewByType(dbResiList, dbResiList.get(NumConstant.ZERO).getCustomerId(), formDTO.getIsSync(),JOB_TYPE_NAT);
}
pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize);
@ -407,11 +417,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
*/
@Override
public void natInfoSyncButton(DataSyncTaskParam formDTO) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staffInfo){
throw new EpmetException("未查询到工作人员信息:"+formDTO.getStaffId());
}
public void submitSyncJob(DataSyncTaskParam formDTO) {
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("未查询到组织信息:"+formDTO.getAgencyId());
@ -420,6 +426,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
// 查询该组织是否存在等待中或者进行中的任务
LambdaQueryWrapper<IcSyncJobEntity> qw = new LambdaQueryWrapper<>();
qw.eq(IcSyncJobEntity::getOrgId,formDTO.getAgencyId())
.eq(IcSyncJobEntity::getJobType,formDTO.getJobType())
.in(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING,OPERATION_STATUS_PROCESSING);
List<IcSyncJobEntity> icSyncJobEntities = icSyncJobDao.selectList(qw);
// 当前组织下存在同步任务
@ -433,43 +440,10 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
e.setOrgId(formDTO.getAgencyId());
e.setPid(agencyInfo.getPid());
e.setOrgIdPath(StringUtils.isBlank(agencyInfo.getPids()) ? agencyInfo.getId() : agencyInfo.getPids()+":"+agencyInfo.getId());
e.setJobType(JOB_TYPE_NAT);
e.setJobType(formDTO.getJobType());
e.setOperatorId(formDTO.getStaffId());
e.setOperationStatus(OPERATION_STATUS_WAITING);
insertSync(e);
//List<IcSyncJobEntity> waitList;
//do {
// LambdaQueryWrapper<IcSyncJobEntity> qw3 = new LambdaQueryWrapper<>();
// qw3.eq(IcSyncJobEntity::getCustomerId,formDTO.getCustomerId())
// .eq(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING)
// .eq(IcSyncJobEntity::getJobType,JOB_TYPE_NAT)
// .orderByAsc(BaseEpmetEntity::getCreatedTime);
// waitList = icSyncJobDao.selectList(qw3);
// if (CollectionUtils.isNotEmpty(waitList)){
// for (IcSyncJobEntity entity : waitList) {
// RLock lock = null;
// try {
// lock = distributedLock.getLock(entity.getOrgId() + JOB_TYPE_NAT, 60L, 60L, TimeUnit.SECONDS);
// updateSync(entity.getId(),OPERATION_STATUS_PROCESSING);
// }catch (Exception ex){
// log.error(ex.getMessage());
// throw new EpmetException(ex.getMessage());
// }finally {
// lock.unlock();
// }
// formDTO.setAgencyId(entity.getOrgId());
// try {
// natInfoScanTask(formDTO);
// }catch (Exception ee){
// log.error(ee.getMessage());
// throw new EpmetException(ee.getMessage());
// }finally {
// updateSync(entity.getId(),OPERATION_STATUS_FINISH);
// }
// }
// }
//}while (CollectionUtils.isNotEmpty(waitList));
}
@Transactional(rollbackFor = Exception.class)
@ -532,7 +506,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
try {
//查询正常状态的居民
//hsjc(finalDbResiList, config.getCustomerId(), formDTO.getIsSync());
yantaiHsjcByDbView(finalDbResiList, config.getCustomerId(), formDTO.getIsSync());
yanTaiDbViewByType(finalDbResiList, config.getCustomerId(), formDTO.getIsSync(), JOB_TYPE_NAT);
log.info("======核酸检测信息拉取结束======");
} catch (Exception e) {
log.error("hsjc thread execute exception", e);
@ -1063,15 +1037,172 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
* @param customerId
* @param isSync
*/
public void yantaiHsjcByDbView(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync) {
List<List<NatUserInfoResultDTO>> resiInfobatchs = ListUtils.partition(resiInfos, 50);
for (List<NatUserInfoResultDTO> resibatch : resiInfobatchs) {
public void yanTaiDbViewByType(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync, String jobType) {
List<List<NatUserInfoResultDTO>> resiInfoBatchs = ListUtils.partition(resiInfos, 50);
for (List<NatUserInfoResultDTO> resiBatch : resiInfoBatchs) {
// n个一批,来处理他们的核酸信息,太多怕给数据库查崩了。
try {
yantaiHsjcByDbViewPartition(resibatch, customerId, isSync);
switch (jobType){
// 核酸检测
case JOB_TYPE_NAT:
yantaiHsjcByDbViewPartition(resiBatch, customerId, isSync);
break;
// 疫苗接种
case JOB_TYPE_VACCINE:
yanTaiVaccineByDbViewPartition(resiBatch, customerId, isSync);
break;
default:
break;
}
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【更新核酸检测信息(from 兰图)】失败,信息:{}", errorMsg);
log.error("【更新{}信息(from 兰图)】失败,信息:{}", jobType, errorMsg);
}
}
}
/**
* @Description 疫苗接种信息处理
* @param resiInfos
* @param customerId
* @param isSync
* @Author zxc
* @Date 2022/11/11 11:07
*/
public void yanTaiVaccineByDbViewPartition(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync){
// 将居民信息转化为<idCard,resiInfo>的map
Map<String, NatUserInfoResultDTO> idCardAndResiInfoMap = resiInfos.stream().collect(Collectors.toMap(resi -> resi.getIdCard(), Function.identity()));
List<String> idCards = new ArrayList<>(idCardAndResiInfoMap.keySet());
// 1.获取核酸采样信息
Map<String, Object> args = new HashMap<>();
args.put("idcards", idCards);
// todo 疫苗接种视图
String json = "[\n" +
" {\n" +
" \"id\": \"751956862490071040\",\n" +
" \"cardno\": \"370785195001012558\",\n" +
" \"name\": \"李国玺\",\n" +
" \"data\":\n" +
" {\n" +
" \"vaccineList\":\n" +
" [\n" +
" {\n" +
" \"vaccineCount\": \"1\",\n" +
" \"inoculateDate\": \"2021-04-24 16:02:46\",\n" +
" \"lastStationName\": \"烟台市只楚医院临时接种点\"\n" +
" },\n" +
" {\n" +
" \"vaccineCount\": \"2\",\n" +
" \"inoculateDate\": \"2021-06-10 16:20:30\",\n" +
" \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" +
" },\n" +
" {\n" +
" \"vaccineCount\": \"3\",\n" +
" \"inoculateDate\": \"2021-12-10 15:12:24\",\n" +
" \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" +
" }\n" +
" ],\n" +
" \"flag\": 1\n" +
" },\n" +
" \"vaccineCount\": 3\n" +
" }\n" +
"]";
// List<Map> vaccineList = JSON.parseArray(json,Map.class);
List<Map<String,Object>> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList(
"select data, name, cardno, vaccineCount from t_ymjz_info where cardno in (:idcards)", args);
List<YTVaccineListDTO> ytVaccineListFromApi = new ArrayList<>();
if (CollectionUtils.isNotEmpty(vaccineList)) {
vaccineList.forEach(v -> {
if (v.containsKey("data")){
JSONObject jo = JSON.parseObject((String) v.get("data"));
if (jo.containsKey("vaccineList")) {
JSONArray vaccineListJA = jo.getJSONArray("vaccineList");
List<YTVaccineListDTO> vaccineList1 = vaccineListJA.toJavaList(YTVaccineListDTO.class);
vaccineList1.forEach(v1 -> {
v1.setCardno(v.get("cardno").toString());
// 秒转换成:00
Matcher matcher = VACCINE_DATE_OF_API_PATTERN.matcher(v1.getInoculateDate());
if (matcher.matches()) {
v1.setInoculateDate(matcher.group(1).concat(":00"));
}
});
ytVaccineListFromApi.addAll(vaccineList1);
}
//Map<String, Object> data = (Map<String, Object>) v.get("data");
//if (data.containsKey("vaccineList")){
// List<YTVaccineListDTO> vaccineList1 = JSON.parseArray(data.get("vaccineList").toString(), YTVaccineListDTO.class);
// vaccineList1.forEach(v1 -> {
// v1.setCardno(v.get("cardno").toString());
// });
// ytVaccineListDTOS.addAll(vaccineList1);
//}
}
});
List<IcVaccineEntity> entities = new ArrayList<>();
// 过滤已存在的记录
List<YTVaccineListDTO> existVaccines = icVaccineDao.getExistVaccine(ytVaccineListFromApi);
if (CollectionUtils.isNotEmpty(existVaccines)){
for (YTVaccineListDTO existVaccineItem : existVaccines) {
Iterator<YTVaccineListDTO> iterator = ytVaccineListFromApi.iterator();
while (iterator.hasNext()) {
YTVaccineListDTO vaccineFromApi = iterator.next();
// 身份证号和接种时间都一致,移除
if (vaccineFromApi.getCardno().equals(existVaccineItem.getCardno())
&& vaccineFromApi.getInoculateDate().equals(existVaccineItem.getInoculateDate())) {
iterator.remove();
}
}
//for (int i = 0; i < ytVaccineListFromApi.size(); i++) {
// String inoculateDateFromApi = ytVaccineListFromApi.get(i).getInoculateDate();
// Matcher matcher = VACCINE_DATE_OF_API_PATTERN.matcher(inoculateDateFromApi);
// if (ytVaccineListFromApi.get(i).getCardno().equals(e.getCardno())
// && matcher.matches()
// && matcher.group(1).equals(e.getInoculateDate())){
// ytVaccineListFromApi.remove(i);
// }
//}
}
}
if (CollectionUtils.isNotEmpty(ytVaccineListFromApi)){
ytVaccineListFromApi.forEach(v -> {
resiInfos.forEach(u -> {
if (v.getCardno().equals(u.getIdCard())){
IcVaccineEntity e = new IcVaccineEntity();
e.setCustomerId(customerId);
e.setName(u.getName());
e.setMobile(u.getMobile());
e.setIdCard(u.getIdCard());
e.setIsResiUser(StringUtils.isBlank(u.getUserId()) ? NumConstant.ZERO_STR : NumConstant.ONE_STR);
e.setUserId(StringUtils.isBlank(u.getUserId()) ? "" : u.getUserId());
e.setUserType("ytPull");
e.setInoculateTime(DateUtils.parseDate(v.getInoculateDate(),DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE));
e.setInoculateAddress(v.getLastStationName());
e.setAgencyId(u.getAgencyId());
e.setPids(u.getPids());
entities.add(e);
}
});
});
icVaccineService.insertBatch(entities,NumConstant.ONE_HUNDRED);
List<IcVaccineRelationEntity> relationEntities = new ArrayList<>();
entities.forEach(e -> {
IcVaccineRelationEntity re = new IcVaccineRelationEntity();
re.setIcVaccineId(e.getId());
re.setPids(e.getPids());
re.setCustomerId(customerId);
re.setUserType("ytPull");
re.setAgencyId(e.getAgencyId());
// 拉取居民的疫苗接种信;因为查询的就是组织下的居民,所以都是本地居民。
re.setIsLocalResiUser(NumConstant.ONE_STR);
relationEntities.add(re);
});
icVaccineRelationService.insertBatch(relationEntities,NumConstant.ONE_HUNDRED);
}
}
}
@ -1198,14 +1329,62 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
int updatedResiCount = 0;
log.info("【任务处理器同步数据】组织Id:{},开始同步数据,同步类型:{}", jobEntity.getOrgId(), jobEntity.getJobType());
do {
// 分页,一次查询1000居民,循环更新他们的核酸检测信息
// 分页,一次查询 1000 居民,循环更新他们的核酸检测信息
resis = getNatUserInfoFromDb(p, pageNo, pageSize);
if (CollectionUtils.isNotEmpty(resis)) {
yantaiHsjcByDbView(resis, jobEntity.getCustomerId(), NumConstant.ONE_STR);
yanTaiDbViewByType(resis, jobEntity.getCustomerId(), NumConstant.ONE_STR, jobEntity.getJobType());
pageNo++;
updatedResiCount += resis.size();
}
} while (CollectionUtils.isNotEmpty(resis));
log.info("【任务处理器同步数据】组织Id:{},同步类型:{},已完成居民数:{}", jobEntity.getOrgId(), jobEntity.getJobType(), updatedResiCount);
}
/**
* @Description 疫苗接种信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/11 16:56
*/
@Override
public void vaccineInfoScanTask(DataSyncTaskParam formDTO) {
List<DataSyncConfigDTO> configData = getConfigData(null, EpidemicConstant.DATA_CODE_VACCINE);
if (CollectionUtils.isEmpty(configData)){
log.warn("vaccineInfoScanTask not exists config data ");
return;
}
long count = configData.stream().filter(o -> CollectionUtils.isNotEmpty(o.getScopeList())).count();
if (count < 1) {
log.warn("vaccineInfoScanTask scopeList is null");
return;
}
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.ONE_THOUSAND;
List<NatUserInfoResultDTO> dbResiList = null;
do {
for (DataSyncConfigDTO config : configData) {
// 设置查询数据范围
formDTO.setOrgList(config.getScopeList());
DataSyncEnum anEnum = DataSyncEnum.getEnum(config.getDataCode());
dbResiList = getNatUserInfoFromDb(formDTO, pageNo, pageSize);
if (CollectionUtils.isEmpty(dbResiList)) {
continue;
}
switch (anEnum) {
case VACCINE:
try {
//查询正常状态的居民
yanTaiVaccineByDbViewPartition(dbResiList,config.getCustomerId(),NumConstant.ZERO_STR);
log.info("======vaccine信息拉取结束======");
} catch (Exception e) {
log.error("vaccine thread execute exception", e);
}
break;
default:
log.warn("没有要处理的数据");
}
}
pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize);
}
}

24
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java

@ -1,6 +1,7 @@
package com.epmet.service.impl;
import com.alibaba.excel.EasyExcel;
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.constant.StrConstant;
@ -227,7 +228,7 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
*/
@Transactional(rollbackFor = Exception.class)
public void persisNat(IcNatCompareRecordEntity data, CustomerStaffInfoCacheResult staffInfo, String importDate, Date importTime) {
// 查询是否本辖区居民
// 查询是否本辖区居民 没有限制status='0'
IcResiUserDTO icResiUserDTO = SpringContextUtils.getBean(IcResiUserService.class).getByIdCard(data.getCustomerId(), data.getIdCard(), null);
AgencyInfoCache agencyInfoCache = CustomerOrgRedis.getAgencyInfo(staffInfo.getAgencyId());
//根据身份证号判断是否存在基础信息
@ -270,8 +271,22 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
// 是否客户下居民(0:否 1:是)
origin.setIsResiUser(StringUtils.isNotBlank(origin.getIcResiUserId()) ? NumConstant.ONE_STR : NumConstant.ZERO_STR);
origin.setLatestImportTime(importTime);
baseDao.updateById(origin);
IcNatCompareRecRelationEntity existRelationEntity=icNatCompareRecRelationDao.selectExist(data.getCustomerId(),origin.getId(),staffInfo.getAgencyId(),importDate);
LambdaUpdateWrapper<IcNatCompareRecordEntity> updateWrapper=new LambdaUpdateWrapper<>();
updateWrapper.eq(IcNatCompareRecordEntity::getId,origin.getId());
updateWrapper.set(IcNatCompareRecordEntity::getName, origin.getName())
.set(IcNatCompareRecordEntity::getMobile, origin.getMobile())
.set(IcNatCompareRecordEntity::getIsResiUser, origin.getIsResiUser())
.set(IcNatCompareRecordEntity::getIcResiUserId, origin.getIcResiUserId())
.set(IcNatCompareRecordEntity::getLatestCyTime, origin.getLatestCyTime())
.set(IcNatCompareRecordEntity::getLatestNatTime, origin.getLatestNatTime())
.set(IcNatCompareRecordEntity::getNatResult, origin.getNatResult())
.set(IcNatCompareRecordEntity::getNatAddress, origin.getNatAddress())
.set(IcNatCompareRecordEntity::getContactAddress, origin.getContactAddress())
.set(IcNatCompareRecordEntity::getLatestImportTime, origin.getLatestImportTime())
.set(IcNatCompareRecordEntity::getInternalRemark, origin.getInternalRemark());
baseDao.update(null,updateWrapper);
// 关系表 agency_id+compare_rec_id唯一
IcNatCompareRecRelationEntity existRelationEntity = icNatCompareRecRelationDao.selectExist(data.getCustomerId(), origin.getId(), staffInfo.getAgencyId(), null);
if(null!=existRelationEntity){
// 是否本社区(agency_id)下居民(0:否 1:是)
if (null != icResiUserDTO && icResiUserDTO.getAgencyId().equals(staffInfo.getAgencyId())) {
@ -281,9 +296,12 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
}
//记录最后一次导入时间、最近一次操作人id,最近一次操作人姓名
existRelationEntity.setImportTime(importTime);
existRelationEntity.setImportDate(importDate);
existRelationEntity.setStaffId(staffInfo.getStaffId());
existRelationEntity.setStaffName(staffInfo.getRealName());
existRelationEntity.setAgencyName(staffInfo.getAgencyName());
existRelationEntity.setUpdatedBy(staffInfo.getStaffId());
existRelationEntity.setUpdatedTime(importTime);
icNatCompareRecRelationDao.updateById(existRelationEntity);
}else{
IcNatCompareRecRelationEntity relationEntity = new IcNatCompareRecRelationEntity();

9
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java

@ -246,9 +246,14 @@ public class IcNatServiceImpl extends BaseServiceImpl<IcNatDao, IcNatEntity> imp
public void edit(AddIcNatFormDTO formDTO) {
disposeIsNull(formDTO);
//0.先根据身份证号和检测时间以及检测结果校验除当前数据是否还存在相同数据
IcNatDTO icNatDTO = baseDao.getNatDTO(formDTO.getCustomerId(), formDTO.getIcNatId(), formDTO.getIdCard(), null != formDTO.getNatTime() ? DateUtils.format(formDTO.getNatTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null, formDTO.getNatResult(), null != formDTO.getSampleTime() ? DateUtils.format(formDTO.getSampleTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null);
IcNatDTO icNatDTO = baseDao.getNatDTO(formDTO.getCustomerId(),
formDTO.getIcNatId(),
formDTO.getIdCard(),
null != formDTO.getNatTime() ? DateUtils.format(formDTO.getNatTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null,
formDTO.getNatResult(),
null != formDTO.getSampleTime() ? DateUtils.format(formDTO.getSampleTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE) : null);
if (null != icNatDTO) {
throw new RenException(EpmetErrorCode.IC_NAT.getCode(), EpmetErrorCode.IC_NAT.getMsg());
throw new EpmetException(EpmetErrorCode.IC_NAT.getCode(), EpmetErrorCode.IC_NAT.getMsg());
}
//1.更新核酸记录基础信息表数据
IcNatEntity entity = ConvertUtils.sourceToTarget(formDTO, IcNatEntity.class);

357
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiComparisonRecordServiceImpl.java

@ -0,0 +1,357 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.YtSfhyxxcxdsjjResDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.feign.ResultDataResolver;
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.utils.YtHsResUtils;
import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.IcResiComparisonRecordDao;
import com.epmet.dao.IcResiUserDao;
import com.epmet.dao.IcSyncJobDao;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.form.ComparisonFormDTO;
import com.epmet.dto.form.ResiComparisonListFormDTO;
import com.epmet.dto.result.ComparisonResultDTO;
import com.epmet.dto.result.ResiComparisonListResultDTO;
import com.epmet.entity.IcResiComparisonRecordEntity;
import com.epmet.entity.IcResiUserEntity;
import com.epmet.entity.IcSyncJobEntity;
import com.epmet.service.IcResiComparisonRecordService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import static com.epmet.constant.EpidemicConstant.OPERATION_STATUS_PROCESSING;
import static com.epmet.constant.EpidemicConstant.OPERATION_STATUS_WAITING;
/**
* 居民信息与公安部信息比对记录表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-11-14
*/
@Service
@Slf4j
public class IcResiComparisonRecordServiceImpl extends BaseServiceImpl<IcResiComparisonRecordDao, IcResiComparisonRecordEntity> implements IcResiComparisonRecordService, ResultDataResolver {
@Autowired
private IcResiUserDao icResiUserDao;
@Autowired
private IcSyncJobDao icSyncJobDao;
@Override
public PageData<ResiComparisonListResultDTO> resiComparisonList(ResiComparisonListFormDTO formDTO) {
//1.获取工作人员信息
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId());
if (null == staffInfo) {
throw new EpmetException(String.format("查询工作人员%s缓存信息失败...", formDTO.getUserId()));
}
formDTO.setAgencyId(staffInfo.getAgencyId());
//2.按条件分页查询数据s
PageInfo<ResiComparisonListResultDTO> data = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage())
.doSelectPageInfo(() -> baseDao.getResiComparisonList(formDTO));
return new PageData(data.getList(), data.getTotal());
}
/**
* @Author sun
* @Description 比对批量比对组织及下级比对
**/
@Override
public ComparisonResultDTO comparison(ComparisonFormDTO formDTO) {
ComparisonResultDTO resultDTO = new ComparisonResultDTO();
//1.获取工作人员信息
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId());
if (null == staffInfo) {
throw new EpmetException(String.format("查询工作人员%s缓存信息失败...", formDTO.getUserId()));
}
formDTO.setAgencyId(staffInfo.getAgencyId());
//2.判断是单条比对的则直接处理
if (formDTO.getUserIdList().size() == 1) {
IcResiUserEntity entity = icResiUserDao.selectById(formDTO.getUserIdList().get(NumConstant.ZERO));
if (null == entity) {
resultDTO.setResult(true);
resultDTO.setResultExplain("未查询到居民信息");
return resultDTO;
}
List<IcResiComparisonRecordEntity> list = new ArrayList<>();
IcResiComparisonRecordEntity recordEntity = new IcResiComparisonRecordEntity();
recordEntity.setCustomerId(entity.getCustomerId());
recordEntity.setResiId(entity.getId());
recordEntity.setResiName(entity.getName());
recordEntity.setResiIdCard(entity.getIdCard());
recordEntity.setIsComparison("1");
YtSfhyxxcxdsjjResDTO sfhyxxcxdsjjResult = YtHsResUtils.sfhyxxcxdsjj(entity.getIdCard(), entity.getName());
/*YtSfhyxxcxdsjjResDTO sfhyxxcxdsjjResult = new YtSfhyxxcxdsjjResDTO();
List<YtSfhyxxcxdsjjResDTO.Result> l = new ArrayList<>();
YtSfhyxxcxdsjjResDTO.Result d = new YtSfhyxxcxdsjjResDTO.Result();
d.setGMSFHM("371424188808087654");
d.setXM("小二");
l.add(d);
sfhyxxcxdsjjResult.setResult(l);*/
if (null == sfhyxxcxdsjjResult || sfhyxxcxdsjjResult.getCode() != 200) {
recordEntity.setComparisonResult("公安部接口调用失败");
resultDTO.setResult(true);
resultDTO.setResultExplain("公安部接口调用失败");
return resultDTO;
} else {
//公安部不存在的数据
if (CollectionUtils.isEmpty(sfhyxxcxdsjjResult.getResult())) {
recordEntity.setComparisonResult("公安部身份证号对应数据不存在");
//数据不一致的赋值为未处理信息不一致(空)
recordEntity.setType("0");
//代表程序干活了
recordEntity.setIdentical("2");
resultDTO.setResult(true);
resultDTO.setResultExplain("公安部身份证号对应数据不存在");
} else {//在公安部查询到了数据
recordEntity.setPoliceName(sfhyxxcxdsjjResult.getResult().get(0).getXM());
recordEntity.setPoliceIdCard(sfhyxxcxdsjjResult.getResult().get(0).getGMSFHM());
//公安部跟居民库姓名不一致
if (!entity.getName().equals(sfhyxxcxdsjjResult.getResult().get(0).getXM())) {
//姓名不一致的赋值为未处理信息不一致(否)
recordEntity.setType("0");
recordEntity.setIdentical("0");
recordEntity.setComparisonResult("公安部与居民库姓名不相同");
resultDTO.setResult(true);
resultDTO.setResultExplain("公安部与居民库姓名不相同");
} else {
recordEntity.setType("1");
recordEntity.setIdentical("1");
}
}
}
recordEntity.setCreatedBy(formDTO.getUserId());
recordEntity.setUpdatedBy(formDTO.getUserId());
list.add(recordEntity);
baseDao.saveInsert(list);
return resultDTO;
}
//3.判断多条比对则开启子线程执行
if (CollectionUtils.isEmpty(formDTO.getUserIdList()) || formDTO.getUserIdList().size() > NumConstant.ONE) {
//asyncComparison(formDTO);
saveComparison(formDTO);
saveJob(formDTO);
resultDTO.setResult(true);
resultDTO.setResultExplain("数据比对中请稍后");
return resultDTO;
}
return resultDTO;
}
/**
* @Author sun
* @Description 线程逐条比对居民信息
**/
@Async
public void asyncComparison(ComparisonFormDTO formDTO) {
PageData<IcResiUserDTO> data = null;
formDTO.setIsPage(false);
formDTO.setPageSize(NumConstant.ONE_THOUSAND);
int pageNo = formDTO.getPageNo();
do {
data = getResiUserList(formDTO);
List<IcResiComparisonRecordEntity> list = new ArrayList<>();
data.getList().forEach(o -> {
IcResiComparisonRecordEntity recordEntity = new IcResiComparisonRecordEntity();
recordEntity.setCustomerId(o.getCustomerId());
recordEntity.setResiId(o.getId());
recordEntity.setResiName(o.getName());
recordEntity.setResiIdCard(o.getIdCard());
recordEntity.setIsComparison("1");
YtSfhyxxcxdsjjResDTO sfhyxxcxdsjjResult = YtHsResUtils.sfhyxxcxdsjj(o.getIdCard(), o.getName());
if (null == sfhyxxcxdsjjResult || sfhyxxcxdsjjResult.getCode() != 200) {
recordEntity.setComparisonResult("接口调用失败");
} else {
//公安部不存在的数据
if (CollectionUtils.isEmpty(sfhyxxcxdsjjResult.getResult())) {
recordEntity.setComparisonResult("公安部身份证号对应数据不存在");
//数据不一致的赋值为未处理信息不一致(空)
recordEntity.setType("0");
//代表程序干活了
recordEntity.setIdentical("2");
} else {//在公安部查询到了数据
recordEntity.setPoliceName(sfhyxxcxdsjjResult.getResult().get(0).getXM());
recordEntity.setPoliceIdCard(sfhyxxcxdsjjResult.getResult().get(0).getGMSFHM());
//公安部跟居民库姓名不一致
if (!o.getName().equals(sfhyxxcxdsjjResult.getResult().get(0).getXM())) {
//姓名不一致的赋值为未处理信息不一致(否)
recordEntity.setType("0");
recordEntity.setIdentical("0");
recordEntity.setComparisonResult("公安部与居民库姓名不相同");
} else {
recordEntity.setType("1");
recordEntity.setIdentical("1");
}
}
}
recordEntity.setCreatedBy(formDTO.getUserId());
recordEntity.setUpdatedBy(formDTO.getUserId());
list.add(recordEntity);
});
baseDao.saveInsert(list);
formDTO.setPageNo(++pageNo);
} while (CollectionUtils.isNotEmpty(data.getList()) && data.getList().size() == formDTO.getPageSize());
}
/**
* 批量将需要比对的人员数据存入比对记录表中
* @param formDTO
*/
public void saveComparison(ComparisonFormDTO formDTO) {
PageData<IcResiUserDTO> data = null;
formDTO.setIsPage(false);
formDTO.setPageSize(NumConstant.ONE_THOUSAND);
int pageNo = formDTO.getPageNo();
do {
data = getResiUserList(formDTO);
List<IcResiComparisonRecordEntity> list = new ArrayList<>();
data.getList().forEach(o -> {
IcResiComparisonRecordEntity recordEntity = new IcResiComparisonRecordEntity();
recordEntity.setCustomerId(o.getCustomerId());
recordEntity.setResiId(o.getId());
recordEntity.setResiName(o.getName());
recordEntity.setResiIdCard(o.getIdCard());
recordEntity.setType("0");
recordEntity.setIdentical("0");
recordEntity.setIsComparison("0");
list.add(recordEntity);
});
insertBatch(list);
formDTO.setPageNo(++pageNo);
} while (CollectionUtils.isNotEmpty(data.getList()) && data.getList().size() == formDTO.getPageSize());
}
public void saveJob(ComparisonFormDTO formDTO) {
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId());
if (null == agencyInfo) {
throw new EpmetException("未查询到组织信息:" + formDTO.getAgencyId());
}
// 查询该组织是否存在等待中或者进行中的任务
LambdaQueryWrapper<IcSyncJobEntity> qw = new LambdaQueryWrapper<>();
qw.eq(IcSyncJobEntity::getOrgId, formDTO.getAgencyId())
.eq(IcSyncJobEntity::getJobType, EpidemicConstant.JOB_TYPE_COMPARISON_RESI)
.in(IcSyncJobEntity::getOperationStatus, OPERATION_STATUS_WAITING, OPERATION_STATUS_PROCESSING);
List<IcSyncJobEntity> icSyncJobEntities = icSyncJobDao.selectList(qw);
// 当前组织下存在同步任务
if (CollectionUtils.isNotEmpty(icSyncJobEntities)) {
throw new EpmetException(EpmetErrorCode.EXIST_SYNC_JOB_ERROR.getCode());
}
// 不存在新增一条记录
IcSyncJobEntity e = new IcSyncJobEntity();
e.setCustomerId(formDTO.getCustomerId());
e.setOrgId(formDTO.getAgencyId());
e.setPid(agencyInfo.getPid());
e.setOrgIdPath(StringUtils.isBlank(agencyInfo.getPids()) ? agencyInfo.getId() : agencyInfo.getPids() + ":" + agencyInfo.getId());
e.setJobType(EpidemicConstant.JOB_TYPE_COMPARISON_RESI);
e.setOperatorId(formDTO.getUserId());
e.setOperationStatus(OPERATION_STATUS_WAITING);
icSyncJobDao.insert(e);
}
@Override
public void comparisonUserData(IcSyncJobEntity jobEntity) {
ComparisonFormDTO formDTO = new ComparisonFormDTO();
PageData<IcResiComparisonRecordEntity> data = null;
formDTO.setIsPage(false);
formDTO.setPageSize(NumConstant.ONE_THOUSAND);
int pageNo = NumConstant.ONE;
do {
data = getComparisonList(formDTO);
data.getList().forEach(o -> {
o.setIsComparison("1");
YtSfhyxxcxdsjjResDTO sfhyxxcxdsjjResult = YtHsResUtils.sfhyxxcxdsjj(o.getResiIdCard(), o.getResiName());
/*YtSfhyxxcxdsjjResDTO sfhyxxcxdsjjResult = new YtSfhyxxcxdsjjResDTO();
List<YtSfhyxxcxdsjjResDTO.Result> l = new ArrayList<>();
YtSfhyxxcxdsjjResDTO.Result d = new YtSfhyxxcxdsjjResDTO.Result();
d.setGMSFHM("371424188808087654");
d.setXM("小二");
l.add(d);
sfhyxxcxdsjjResult.setResult(l);*/
if (null == sfhyxxcxdsjjResult || sfhyxxcxdsjjResult.getCode() != 200) {
o.setComparisonResult("接口调用失败");
} else {
//公安部不存在的数据
if (CollectionUtils.isEmpty(sfhyxxcxdsjjResult.getResult())) {
o.setComparisonResult("公安部身份证号对应数据不存在");
//数据不一致的赋值为未处理信息不一致(空)
o.setType("0");
//代表程序干活了
o.setIdentical("2");
} else {//在公安部查询到了数据
o.setPoliceName(sfhyxxcxdsjjResult.getResult().get(0).getXM());
o.setPoliceIdCard(sfhyxxcxdsjjResult.getResult().get(0).getGMSFHM());
//公安部跟居民库姓名不一致
if (!o.getResiName().equals(sfhyxxcxdsjjResult.getResult().get(0).getXM())) {
//姓名不一致的赋值为未处理信息不一致(否)
o.setType("0");
o.setIdentical("0");
o.setComparisonResult("公安部与居民库姓名不相同");
} else {
o.setType("1");
o.setIdentical("1");
}
}
}
o.setCreatedBy(formDTO.getUserId());
o.setUpdatedBy(formDTO.getUserId());
});
baseDao.saveInsert(data.getList());
formDTO.setPageNo(++pageNo);
} while (CollectionUtils.isNotEmpty(data.getList()) && data.getList().size() == formDTO.getPageSize());
}
private PageData<IcResiComparisonRecordEntity> getComparisonList(ComparisonFormDTO formDTO) {
PageInfo<IcResiComparisonRecordEntity> data = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage())
.doSelectPageInfo(() -> baseDao.getComparisonList(formDTO));
return new PageData(data.getList(), data.getTotal());
}
private PageData<IcResiUserDTO> getResiUserList(ComparisonFormDTO formDTO) {
PageInfo<IcResiUserDTO> data = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage())
.doSelectPageInfo(() -> icResiUserDao.getResiUserList(formDTO));
return new PageData(data.getList(), data.getTotal());
}
/**
* @Author sun
* @Description 比对后的更新
**/
@Override
public void comparisonUpdate(ComparisonFormDTO formDTO) {
//1.查询比对记录表数据
IcResiComparisonRecordEntity entity = baseDao.selectById(formDTO.getComparisonRecordId());
if (null == entity) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查询到对应比对记录数据", "未查询到对应比对记录数据");
}
//2.根据居民信息表数据
IcResiUserEntity resiUserEntity = new IcResiUserEntity();
resiUserEntity.setId(entity.getResiId());
resiUserEntity.setName(entity.getPoliceName());
icResiUserDao.updateById(resiUserEntity);
//3.更新比对表数据状态
entity.setType("1");
entity.setIdentical("1");
updateById(entity);
}
}

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

@ -58,11 +58,13 @@ import com.epmet.dao.*;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.form.demand.UserDemandNameQueryFormDTO;
import com.epmet.dto.form.stats.UserHouseStatsQueryFormDTO;
import com.epmet.dto.result.*;
import com.epmet.dto.result.demand.IcResiDemandDictDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.dto.result.resi.IcResiNonDynamicResultDTO;
import com.epmet.entity.*;
import com.epmet.enums.RenHuConditionEnum;
import com.epmet.excel.EpidemicPreventionExportExcel;
import com.epmet.excel.support.ExportResiUserItemDTO;
import com.epmet.feign.*;
@ -72,6 +74,7 @@ import com.epmet.opendata.dto.result.ResidentByIdCardResultDTO;
import com.epmet.opendata.feign.GuardarDatosFeignClient;
import com.epmet.resi.partymember.feign.ResiPartyMemberOpenFeignClient;
import com.epmet.service.*;
import com.epmet.stats.UserHouseStatsResultDTO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@ -167,6 +170,9 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
@Resource
private IcUserChangeDetailedDao icUserChangeDetailedDao;
@Autowired
private DataReportOpenFeignClient dataReportOpenFeignClient;
private QueryWrapper<IcResiUserEntity> getWrapper(Map<String, Object> params) {
@ -1478,6 +1484,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
if (RelationshipEnum.SELF.getCode().equals(item.getYhzgx())) {
result.setOwnerName(item.getName());
}
//2022.11.17 返参增加人户状况名称
if (StringUtils.isBlank(item.getRhzk())){
bean.setRenHuCondition(RenHuConditionEnum.ZBQC.getName());
}else {
bean.setRenHuCondition(RenHuConditionEnum.getNameByCode(item.getRhzk()));
}
return bean;
}).collect(Collectors.toList());
result.setUserList(userList);
@ -2090,6 +2102,16 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
resultDTO.setOrgId(formDTO.getOrgId());
resultDTO.setOrgType(formDTO.getOrgType());
// 计算较上月的数据
Date lastDayOfLastMonth = DateUtils.getLastDayOfMonth(DateUtils.addDateMonths(new Date(), -1));
UserHouseStatsQueryFormDTO form = new UserHouseStatsQueryFormDTO(formDTO.getOrgId(), formDTO.getOrgType(), DateUtils.format(lastDayOfLastMonth, "yyyyMMdd"));
UserHouseStatsResultDTO lastMonthUserHouseStats = getResultDataOrThrowsException(dataReportOpenFeignClient.getUserHouseDailyStatsByDateId(form),
ServiceConstant.DATA_REPORT_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null, null);
resultDTO.setUserTotalJSY(resultDTO.getUserTotal() - lastMonthUserHouseStats.getUserTotal());
resultDTO.setCzUserTotalJSY(resultDTO.getCzUserTotal() - lastMonthUserHouseStats.getCzUserTotal());
resultDTO.setLdUserTotalJSY(resultDTO.getLdUserTotal() - lastMonthUserHouseStats.getLdUserTotal());
return resultDTO;
}
@ -3630,4 +3652,79 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
}
}
/**
* @Description 人户状况统计查询
* @param formDTO
* @Author zxc
* @Date 2022/11/16 09:22
*/
@Override
public RHZKStatisticsResultDTO renHuCondition(RHZKStatisticsFormDTO formDTO) {
if (StringUtils.isBlank(formDTO.getOrgId())){
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staffInfo){
throw new EpmetException("未查询到工作人员:"+formDTO.getStaffId());
}
formDTO.setOrgId(staffInfo.getAgencyId());
formDTO.setOrgType("agency");
}
List<RHZKStatisticsResultDTO> userByRenHu = baseDao.getUserByRenHu(formDTO);
RHZKStatisticsResultDTO r = new RHZKStatisticsResultDTO();
if (CollectionUtils.isEmpty(userByRenHu)){
return r;
}
r.setOrgId(formDTO.getOrgId());
r.setUserTotal(userByRenHu.stream().collect(Collectors.summingInt(RHZKStatisticsResultDTO::getTotal)));
userByRenHu.forEach(u -> {
switch (u.getRhzk()){
case UserConstant.R_H_Y_Z:
r.setRhyzUserTotal(u.getTotal());
r.setRhyzUserRatio(getRatio(r.getUserTotal(),u.getTotal()));
break;
case UserConstant.R_Z_H_B_Z:
r.setRzhbzUserTotal(u.getTotal());
r.setRzhbzUserRatio(getRatio(r.getUserTotal(),u.getTotal()));
break;
case UserConstant.H_Z_R_B_Z:
r.setHzrbzUserTotal(u.getTotal());
r.setHzrbzUserRatio(getRatio(r.getUserTotal(),u.getTotal()));
break;
case UserConstant.Z_B_Q_C:
r.setZbqcUserTotal(u.getTotal());
r.setZbqcUserRatio(getRatio(r.getUserTotal(),u.getTotal()));
break;
default:
break;
}
});
return r;
}
@Override
public List<RHZKStatisticsResultDTO> renHuConditionList(RHZKStatisticsFormDTO formDTO) {
if (CollectionUtils.isEmpty(formDTO.getOrgIds())){
return new ArrayList<>();
}
List<RHZKStatisticsResultDTO> result = new ArrayList<>();
formDTO.getOrgIds().forEach(o -> {
formDTO.setOrgId(o);
result.add(renHuCondition(formDTO));
});
return result;
}
/**
* @Description
* @param total 总人数
* @param fz 分子人数
* @Author zxc
* @Date 2022/11/16 10:12
*/
public BigDecimal getRatio(Integer total,Integer fz){
BigDecimal totalBig = new BigDecimal(total);
BigDecimal fzBig = new BigDecimal(fz);
return fzBig.multiply(NumConstant.ONE_HUNDRED_DECIMAL).divide(totalBig, NumConstant.TWO, BigDecimal.ROUND_HALF_UP);
}
}

21
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.88__ic_resi_comparison_record.sql

@ -0,0 +1,21 @@
CREATE TABLE `ic_resi_comparison_record` (
`ID` varchar(64) NOT NULL COMMENT 'ID',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id',
`RESI_ID` varchar(64) NOT NULL COMMENT 'ic_resi_user.id【比对时的数据值】',
`RESI_NAME` varchar(64) NOT NULL COMMENT '数字社区人员姓名【比对时的数据值】',
`RESI_ID_CARD` varchar(18) NOT NULL COMMENT '数据社区身份证号【比对时的数据值】',
`POLICE_NAME` varchar(64) DEFAULT NULL COMMENT '公安部人员姓名',
`POLICE_ID_CARD` varchar(18) DEFAULT NULL COMMENT '公安部人员证件号',
`TYPE` varchar(1) NOT NULL DEFAULT '0' COMMENT '数据状态(0:未处理 1:已处理)',
`IDENTICAL` varchar(1) NOT NULL DEFAULT '0' COMMENT '信息一致性(0:否 1:是 2:-)2代表程序比对了没有匹配上',
`IS_COMPARISON` varchar(1) DEFAULT '0' COMMENT '是否比对过(0:否 1:是)',
`COMPARISON_RESULT` varchar(255) DEFAULT NULL COMMENT '比对结果说明',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识',
`REVISION` int(11) NOT NULL 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`),
UNIQUE KEY `resi_id` (`RESI_ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='居民信息与公安部信息比对记录表';

4
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__alter_ic_nat.sql

@ -0,0 +1,4 @@
-- 核酸记录表增加非必填字段“试管编号” 对应产蛋4679
ALTER TABLE `ic_nat`
ADD COLUMN `TEST_TUBE_CODE` varchar(255) NULL COMMENT '试管编号' AFTER `ATTACHMENT_URL`;

BIN
epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx

Binary file not shown.

3
epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml

@ -70,7 +70,8 @@
<if test="categoryColumn != null and categoryColumn != ''">
${categoryColumn} AS categoryColumn,
</if>
pids
pids,
mobile
FROM ic_resi_user
WHERE DEL_FLAG = '0'

2
epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecRelationDao.xml

@ -33,6 +33,8 @@
AND r.CUSTOMER_ID = #{customerId}
AND r.COMPARE_REC_ID = #{compareRecId}
AND r.AGENCY_ID = #{agencyId}
<if test='null != importDate and "" != importDate'>
AND r.IMPORT_DATE = #{importDate}
</if>
</select>
</mapper>

3
epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecordDao.xml

@ -32,7 +32,8 @@
c.IC_RESI_USER_ID,
r.CUSTOMER_ID,
r.IMPORT_DATE,
r.IMPORT_TIME as importTime
r.IMPORT_TIME as importTime,
c.INTERNAL_REMARK as internalRemark
FROM ic_nat_compare_rec_relation r
left join ic_nat_compare_record c on (r.COMPARE_REC_ID=c.ID AND c.del_flag='0')
WHERE

12
epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml

@ -16,7 +16,8 @@
nat_address natAddress,
file_name fileName,
attachment_url attachmentUrl,
created_time reportTime
created_time reportTime,
test_tube_code testTubeCode
FROM
ic_nat
WHERE
@ -45,7 +46,8 @@
b.nat_time natTime,
b.sample_time sampleTime,
b.nat_result natResult,
b.nat_address natAddress
b.nat_address natAddress,
b.test_tube_code testTubeCode
FROM
ic_nat_relation a
INNER JOIN ic_nat b ON a.IC_NAT_ID = b.ID
@ -93,7 +95,8 @@
nat_time natTime,
sample_time sampleTime,
nat_result natResult,
nat_address natAddress
nat_address natAddress,
test_tube_code testTubeCode
FROM
ic_nat
WHERE
@ -134,7 +137,8 @@
nat_time,
sample_time,
nat_result,
nat_address
nat_address,
test_tube_code
FROM
ic_nat
WHERE

114
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiComparisonRecordDao.xml

@ -0,0 +1,114 @@
<?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.dao.IcResiComparisonRecordDao">
<insert id="saveInsert">
INSERT INTO ic_resi_comparison_record
(
id,
customer_id,
resi_id,
resi_name,
resi_id_card,
police_name,
police_id_card,
`type`,
identical,
is_comparison,
comparison_result,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time
) VALUE
<foreach collection="list" item="i" separator=",">
(
REPLACE(UUID(), '-', ''),
#{i.customerId},
#{i.resiId},
#{i.resiName},
#{i.resiIdCard},
#{i.policeName},
#{i.policeIdCard},
#{i.type},
#{i.identical},
#{i.isComparison},
#{i.comparisonResult},
0,
0,
#{i.createdBy},
now(),
#{i.createdBy},
now()
)
</foreach>
ON DUPLICATE KEY
UPDATE
resi_name = values(resi_name),
resi_id_card = values(resi_id_card),
police_name = values(police_name),
police_id_card = values(police_id_card),
`type` = values(`type`),
identical = values(identical),
is_comparison = values(is_comparison),
comparison_result = values(comparison_result),
updated_time = NOW(),
updated_by = values(updated_by)
</insert>
<select id="getResiComparisonList" resultType="com.epmet.dto.result.ResiComparisonListResultDTO">
SELECT
a.id resiId,
a.`name` resiName,
a.id_card resiIdCard,
b.id comparisonRecordId,
b.police_name policeName,
b.police_id_card policeIdCard,
IFNULL(b.type, '0') type,
IF (b.type = '1', '已处理', '未处理') typeName,
IFNULL(b.identical, '0') identical,
(case b.identical when '0' then '否' when '1' then '是' WHEN '2' THEN '-' else '否' end ) identicalName,
IFNULL(b.is_comparison, '0') isComparison,
IF (b.is_comparison = '1', '是', '否') isComparisonName,
b.comparison_result comparisonResult
FROM
ic_resi_user a
LEFT JOIN ic_resi_comparison_record b ON a.id = b.resi_id AND b.del_flag = '0'
WHERE
a.del_flag = '0'
AND a.customer_id = #{customerId}
AND a.pids LIKE CONCAT('%',#{agencyId},'%')
<if test="idCard != null and idCard != ''">
AND a.id_card =#{idCard}
</if>
<if test='identical != null and identical != "" and identical == "0" '>
AND (b.id is null or b.identical =#{identical})
</if>
<if test='identical != null and identical != "" and identical != "0" '>
AND b.identical =#{identical}
</if>
<if test='type != null and type != "" and type == "0" '>
AND (b.id is null or b.type =#{type})
</if>
<if test='type != null and type != "" and type != "0" '>
AND b.type =#{type}
</if>
ORDER BY a.pids ASC, b.created_time DESC, a.`NAME` ASC
</select>
<select id="getComparisonList" resultType="com.epmet.entity.IcResiComparisonRecordEntity">
SELECT
*
FROM
ic_resi_comparison_record
WHERE
del_flag = '0'
AND is_comparison = '0'
ORDER BY created_time DESC
</select>
</mapper>

96
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

@ -182,6 +182,7 @@
</sql>
<!-- 查询列表用 -->
<!-- 2022.11.18 小寨子写死排序 -->
<select id="selectListResiMap" parameterType="map" resultType="map">
select
ic_resi_user.id as icResiUserId,
@ -212,13 +213,26 @@
${groupTableName}.ID
</foreach>
</if>
ORDER BY
IC_RESI_USER.GRID_ID desc,
IC_RESI_USER.VILLAGE_ID ASC,
IC_RESI_USER.BUILD_ID ASC,
IC_RESI_USER.UNIT_ID ASC,
IC_RESI_USER.HOME_ID ASC,
IC_RESI_USER.ID ASC
<choose>
<when test="customerId == '1536638904600752130' ">
ORDER BY
field( IC_RESI_USER.GRID_ID, '1537272060187049986', '1537272342477508609', '1537275342477501111', '1593432493598076929' ),
IC_RESI_USER.VILLAGE_ID ASC,
IC_RESI_USER.BUILD_ID ASC,
IC_RESI_USER.UNIT_ID ASC,
IC_RESI_USER.HOME_ID ASC,
IC_RESI_USER.ID ASC
</when>
<otherwise>
ORDER BY
IC_RESI_USER.GRID_ID desc,
IC_RESI_USER.VILLAGE_ID ASC,
IC_RESI_USER.BUILD_ID ASC,
IC_RESI_USER.UNIT_ID ASC,
IC_RESI_USER.HOME_ID ASC,
IC_RESI_USER.ID ASC
</otherwise>
</choose>
</select>
<update id="updateToDel" parameterType="map">
@ -1359,6 +1373,18 @@
<if test='null != type and type.trim() != "" and type == "ld" '>
AND (is_floating != '0' or is_floating is null)
</if>
<if test='null != rhType and rhType.trim() != "" and rhType == "rhyz" '>
AND RHZK = 'rhyz'
</if>
<if test='null != rhType and rhType.trim() != "" and rhType == "rzhbz" '>
AND RHZK = 'rzhbz'
</if>
<if test='null != rhType and rhType.trim() != "" and rhType == "hzrbz" '>
AND RHZK = 'hzrbz'
</if>
<if test='null != rhType and rhType.trim() != "" and rhType == "no" '>
AND(RHZK = '' or RHZK IS null)
</if>
<choose>
<when test='orgType == "agency"'>
AND (agency_id = #{orgId} OR pids LIKE CONCAT('%', #{orgId}, '%'))
@ -1402,4 +1428,60 @@
AND ID_CARD = #{idCard}
</select>
<!-- 根据人户状况查询每个类型的人数 -->
<select id="getUserByRenHu" resultType="com.epmet.dto.result.RHZKStatisticsResultDTO">
SELECT
COUNT(ID) AS total,
rhzk,
orgId
FROM
(SELECT
ID,
IFNULL(RHZK,'') AS rhzk,
<if test='orgType == "agency" '>
AGENCY_ID AS orgId
</if>
<if test='orgType == "grid" '>
GRID_ID AS orgId
</if>
<if test='orgType == "village" '>
VILLAGE_ID AS orgId
</if>
FROM ic_resi_user
WHERE DEL_FLAG = '0'
AND `STATUS` = '0'
<if test='orgType == "agency" '>
AND PIDS LIKE CONCAT('%',#{orgId},'%')
</if>
<if test='orgType == "grid" '>
AND GRID_ID = #{orgId}
</if>
<if test='orgType == "village" '>
AND VILLAGE_ID = #{orgId}
</if>
) t
GROUP BY rhzk
</select>
<select id="getResiUserList" resultType="com.epmet.dto.IcResiUserDTO">
SELECT
a.id,
a.customer_id,
a.`name`,
a.id_card
FROM
ic_resi_user a
LEFT JOIN ic_resi_comparison_record b on a.id = b.RESI_ID
WHERE
a.del_flag = '0'
AND a.pids LIKE CONCAT('%',#{agencyId},'%')
<if test='null != userIdList and userIdList.size() > 0'>
<foreach collection="userIdList" item="id" open="AND a.id IN (" separator="," close=")">
#{id}
</foreach>
</if>
AND b.id is null
order by a.pids ASC, a.created_time DESC
</select>
</mapper>

18
epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml

@ -226,4 +226,22 @@
and (b.USER_ID is null or b.USER_ID ='')
</if>
</update>
<!-- 根据 身份证 查询库里存在的 -->
<select id="getExistVaccine" resultType="com.epmet.dto.YTVaccineListDTO">
SELECT
ID_CARD,
INOCULATE_TIME
FROM ic_vaccine
WHERE DEL_FLAG = '0'
and ID_CARD IN
<foreach collection="list" item="v" separator="," open="(" close=")">
#{v.cardno}
</foreach>
<!--AND (-->
<!-- <foreach collection="list" item="l" separator=" OR ">-->
<!-- (ID_CARD = #{l.cardno} AND INOCULATE_TIME = #{l.inoculateDate})-->
<!-- </foreach>-->
<!-- )-->
</select>
</mapper>

Loading…
Cancel
Save