diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtSfhyxxcxdsjjResDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtSfhyxxcxdsjjResDTO.java new file mode 100644 index 0000000000..ede3d3b5ba --- /dev/null +++ b/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; + @Data + public static class Result { + //身份证号 + private String GMSFHM; + //姓名 + private String XM; + } +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerOrgRedis.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerOrgRedis.java index 23a7f1dd3c..6d11f67930 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerOrgRedis.java +++ b/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 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); + } + } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java index 9010c9b84a..6e968d3af8 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java +++ b/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 param = new HashMap<>(); + param.put(APP_KEY, "RhOHlu7Bmkrj8Vk7uGTNNxHqI"); + param.put("gmsfhm", gmsfhm); + param.put("xm", xm); + log.info("sfhyxxcxdsjj api param:{}", param); + + Result 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"); diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/DataSourceConstant.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/DataSourceConstant.java index d1e438d81a..d73da4247f 100644 --- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/DataSourceConstant.java +++ b/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"; } diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/stats/UserHouseStatsQueryFormDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/stats/UserHouseStatsQueryFormDTO.java new file mode 100644 index 0000000000..ca6ea589fb --- /dev/null +++ b/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; + +} diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/DataReportOpenFeignClient.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/DataReportOpenFeignClient.java index 862013f1a6..97771d20f0 100644 --- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/DataReportOpenFeignClient.java +++ b/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 queryStaffAgencyTree(@PathVariable("agencyId") String agencyId); + + /** + * 通过dateId查询人房统计信息 + * @param input 3个参数,就不用dto了,类太多: + * @return + */ + @PostMapping("/data/report/userHouse/getUserHouseDailyStatsByDateId") + Result getUserHouseDailyStatsByDateId(@RequestBody UserHouseStatsQueryFormDTO input); } diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/impl/DataReportOpenFeignClientFallBack.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/impl/DataReportOpenFeignClientFallBack.java index 247fe4499b..efc784a8b3 100644 --- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/feign/impl/DataReportOpenFeignClientFallBack.java +++ b/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 queryStaffAgencyTree(String agencyId) { return ModuleUtils.feignConError(ServiceConstant.DATA_REPORT_SERVER, "queryStaffAgencyTree",agencyId); } + + @Override + public Result getUserHouseDailyStatsByDateId(UserHouseStatsQueryFormDTO input) { + return ModuleUtils.feignConError(ServiceConstant.DATA_REPORT_SERVER, "getUserHouseDailyStatsByDateId",input); + } } diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/stats/UserHouseStatsResultDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/stats/UserHouseStatsResultDTO.java new file mode 100644 index 0000000000..654bfed4cf --- /dev/null +++ b/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; +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/stats/UserHouseController.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/stats/UserHouseController.java new file mode 100644 index 0000000000..9556299271 --- /dev/null +++ b/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 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().ok(r); + } + +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactAgencyUserHouseDailyDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactAgencyUserHouseDailyDao.java new file mode 100644 index 0000000000..bb2c98b36c --- /dev/null +++ b/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 { + +} \ No newline at end of file diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactGridUserHouseDailyDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/stats/FactGridUserHouseDailyDao.java new file mode 100644 index 0000000000..da22c4a27b --- /dev/null +++ b/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 { + +} \ No newline at end of file diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactAgencyUserHouseDailyEntity.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactAgencyUserHouseDailyEntity.java new file mode 100644 index 0000000000..8bae60daeb --- /dev/null +++ b/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; + +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactGridUserHouseDailyEntity.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/entity/stats/FactGridUserHouseDailyEntity.java new file mode 100644 index 0000000000..f2aded5df4 --- /dev/null +++ b/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; + +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/UserHouseStatsService.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/UserHouseStatsService.java new file mode 100644 index 0000000000..c898ed5ced --- /dev/null +++ b/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); +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/impl/UserHouseStatsServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/stats/impl/UserHouseStatsServiceImpl.java new file mode 100644 index 0000000000..e03c81ac8a --- /dev/null +++ b/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 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 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; + } +} diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactAgencyUserHouseDailyDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactAgencyUserHouseDailyDao.xml new file mode 100644 index 0000000000..8168105c8b --- /dev/null +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactAgencyUserHouseDailyDao.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactGridUserHouseDailyDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactGridUserHouseDailyDao.xml new file mode 100644 index 0000000000..37ae699771 --- /dev/null +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/stats/FactGridUserHouseDailyDao.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/CommunityUserHouseStatsFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/CommunityUserHouseStatsFormDTO.java new file mode 100644 index 0000000000..075dc08b7c --- /dev/null +++ b/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; +} diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/UsingCommunityStatsFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/UsingCommunityStatsFormDTO.java new file mode 100644 index 0000000000..c8afdd13ea --- /dev/null +++ b/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; + +} diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java index 61bee2a9cc..eb7ee86152 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/HouseChartResultDTO.java +++ b/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:未出售 diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java index 45ded6601b..6124648323 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubUserHouseListResultDTO.java +++ b/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; + } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UsingCommunityStatsResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/UsingCommunityStatsResultDTO.java new file mode 100644 index 0000000000..2ba49424b6 --- /dev/null +++ b/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; + +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java index 7b3933ad70..c6576dde5e 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java +++ b/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>().ok(agencyService.getCustomerTree(tokenDto)); } - + /** + * 开通平台的社区数统计 + * @return + */ + @RequestMapping("usingCommunityStats") + public Result usingCommunityStats(@RequestBody UsingCommunityStatsFormDTO input) { + String orgId = input.getOrgId(); + String orgType = input.getOrgType(); + return new Result().ok(agencyService.usingCommunityStats(orgId, orgType)); + } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java index 6a8c433250..e9fb4e56ef 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java +++ b/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 diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java index 0e2f57f7d9..6282777484 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java +++ b/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>().ok(houseService.houseStatisListDetail(formDTO)); } + /** + * 针对社区的人房统计列表 + * @return + */ + @PostMapping("usingCommunityUserHouseStats") + public Result> communityUserHouseStats(@RequestBody CommunityUserHouseStatsFormDTO input) { + + String orgId = input.getOrgId(); + String orgType = input.getOrgType(); + Integer pageNo = input.getPageNo(); + Integer pageSize = input.getPageSize(); + + PageData r = houseService.usingCommunityUserHouseStats(orgId, orgType, pageNo, pageSize); + return new Result>().ok(r); + } + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java index 37e8d93c98..fb1fc77855 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java +++ b/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 getAgencyByUserId(@Param("userId") String userId, @Param("customerId") String customerId); + /** + * 开通社区列表 + * @param agencyId 机关组织的id + * @param agencyOrgIdPath agency的id路径path,包含自己 + * @param endDate 截止日期,也即查询,截止改日期,有多少社区在使用 + * @return + */ + List getUsingCommunityList(@Param("customerId") String customerId, @Param("agencyId") String agencyId, @Param("agencyOrgIdPath") String agencyOrgIdPath, @Param("endDate") Date endDate); + + List getCommunitysByOrgIdPath(@Param("customerId") String customerId, @Param("orgId") String orgId, @Param("orgIdPath") String orgIdPath); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/EnterpriseImportExcelDTO.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/EnterpriseImportExcelDTO.java index 91dfa20ed9..becc763ba3 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/EnterpriseImportExcelDTO.java +++ b/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) diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/AgencyService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/AgencyService.java index 04c73a7756..d7bb4b2564 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/AgencyService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/AgencyService.java @@ -199,4 +199,9 @@ public interface AgencyService { */ List getCustomerTree(TokenDto tokenDto); + /** + * 开通平台的社区数统计 + * @return + */ + UsingCommunityStatsResultDTO usingCommunityStats(String orgId, String orgType); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java index 239e844523..d1d1b87503 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java @@ -197,4 +197,6 @@ public interface HouseService { PageData listHouses4ReportTest(String houseId, Integer pageNo, Integer pageSize); PageData houseStatisListDetail(HouseChartFormDTO formDTO); + + PageData usingCommunityUserHouseStats(String orgId, String orgType, Integer pageNo, Integer pageSize); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java index 3cf98078f5..6833141ad4 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java +++ b/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 currentUsingCommunityList = customerAgencyDao.getUsingCommunityList(customerId, orgId, agencyOrgIdPath, null); + List 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); + } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java index 31aa88b033..56b87d06fa 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java +++ b/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> 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 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 communityIds = customerAgencyDao.getUsingCommunityList(customerId, orgId, CustomerOrgRedis.getOrgIdPath(orgId, orgType), null); + // List communityIds = customerAgencyDao.getCommunitysByOrgIdPath(customerId, orgId, CustomerOrgRedis.getOrgIdPath(orgId, orgType)); + + + // 填充组织信息 + Map communityMap = communityIds.stream().collect(Collectors.toMap(id -> id, id -> concatAgencyNamePath(id))); + List communityUserHouseStats = houseUserChartList(communityIds, communityMap, "agency"); + + return new PageData(communityUserHouseStats, new PageInfo<>(communityIds).getTotal()); + } + + public String concatAgencyNamePath(String agencyId) { + List 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); + } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index 8493df5d81..d221f07b12 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -1011,4 +1011,33 @@ LIMIT 1 + + + + diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/IcEventListFormDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/IcEventListFormDTO.java index c5330c05d8..b582675a11 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/IcEventListFormDTO.java +++ b/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; /** diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/IcEventServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/IcEventServiceImpl.java index b37344a620..d40ff78a46 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/IcEventServiceImpl.java +++ b/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 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()); diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java index 660171fce0..fa39a45b01 100644 --- a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/IcFormItemGroupDTO.java +++ b/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; } diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormGroupDTO.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormGroupDTO.java index 1b2a6c8964..297b4e7163 100644 --- a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/FormGroupDTO.java +++ b/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; + /** * 分组里面的组件 */ diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java index dcb08f35e7..28a82969e6 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcFormController.java +++ b/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 * @author LiuJanJun * @date 2021/12/8 4:28 下午 diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormItemGroupEntity.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormItemGroupEntity.java index 0ce8f42320..9b0e91dde2 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/entity/IcFormItemGroupEntity.java +++ b/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; } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java index 2871ac9a3e..be48d33692 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcFormServiceImpl.java +++ b/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 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 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 icFormItemDao.insert(item); }); - //设置ic_form_item_options + //3、设置ic_form_item_options LambdaQueryWrapper wrapperOptions = new LambdaQueryWrapper<>(); wrapperOptions.eq(IcFormItemOptionsEntity::getCustomerId, defaultCustomerId); wrapperOptions.eq(IcFormItemOptionsEntity::getFormCode, formCode); @@ -233,7 +233,7 @@ public class IcFormServiceImpl extends BaseServiceImpl icFormItemOptionsDao.insert(item); }); - //设置ic_form_item_group + //4、设置ic_form_item_group LambdaQueryWrapper wrapperGroup = new LambdaQueryWrapper<>(); wrapperGroup.eq(IcFormItemGroupEntity::getCustomerId, defaultCustomerId); wrapperGroup.eq(IcFormItemGroupEntity::getFormCode, formCode); @@ -255,7 +255,7 @@ public class IcFormServiceImpl extends BaseServiceImpl icFormItemGroupDao.insert(item); }); - //设置ic_form_query_builder + //5、设置ic_form_query_builder LambdaQueryWrapper wrapperQuery = new LambdaQueryWrapper<>(); wrapperQuery.eq(IcFormQueryBuilderEntity::getCustomerId, defaultCustomerId); wrapperQuery.eq(IcFormQueryBuilderEntity::getFormCode, formCode); @@ -272,6 +272,26 @@ public class IcFormServiceImpl extends BaseServiceImpl icFormQueryBuilderDao.insert(item); }); + //6、设置ic_form_list_item + LambdaQueryWrapper listItemWapper = new LambdaQueryWrapper<>(); + listItemWapper.eq(IcFormListItemEntity::getCustomerId, defaultCustomerId); + listItemWapper.eq(IcFormListItemEntity::getFormCode, formCode); + List 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 wrapperStats = new LambdaQueryWrapper<>(); wrapperStats.eq(IcResiCategoryStatsConfigEntity::getCustomerId, defaultCustomerId); @@ -302,26 +322,6 @@ public class IcFormServiceImpl extends BaseServiceImpl icResiCategoryWarnConfigDao.insert(item); }); - //设置ic_form_list_item - LambdaQueryWrapper listItemWapper = new LambdaQueryWrapper<>(); - listItemWapper.eq(IcFormListItemEntity::getCustomerId, defaultCustomerId); - listItemWapper.eq(IcFormListItemEntity::getFormCode, formCode); - List 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()) { diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/resources/db/migration/V0.0.40__itemgroup_code.sql b/epmet-module/oper-customize/oper-customize-server/src/main/resources/db/migration/V0.0.40__itemgroup_code.sql new file mode 100644 index 0000000000..0e11715c94 --- /dev/null +++ b/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='居民需求信息'; \ No newline at end of file diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml index d0cca510ad..6109c59bf5 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcFormDao.xml +++ b/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 @@ + @@ -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 diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java index be20e5fa68..653d8944ab 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java +++ b/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; } \ No newline at end of file diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java index 1e8da051b1..de5e70080b 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatDTO.java +++ b/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; + /** * 删除标识 */ diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcResiComparisonRecordDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcResiComparisonRecordDTO.java new file mode 100644 index 0000000000..b8f092cc4c --- /dev/null +++ b/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; + +} \ No newline at end of file diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTVaccineListDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTVaccineListDTO.java new file mode 100644 index 0000000000..2950cd00c0 --- /dev/null +++ b/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; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java index 1d7ba24673..b87f03d8d7 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java +++ b/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:是) */ diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ComparisonFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ComparisonFormDTO.java new file mode 100644 index 0000000000..53688b39da --- /dev/null +++ b/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 userIdList; + /** + * 比对记录Id + */ + @NotBlank(message = "比对记录Id不能为空", groups = {Update.class}) + private String comparisonRecordId; + + /** + * token里设置 + */ + private String customerId; + private String userId; + private String agencyId; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java index 215ffabf28..13a230c644 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java +++ b/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; } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RHZKStatisticsFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RHZKStatisticsFormDTO.java new file mode 100644 index 0000000000..8d42f50714 --- /dev/null +++ b/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 orgIds; + + //tokenDto中获取 + private String staffId; + private String customerId; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ResiComparisonListFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ResiComparisonListFormDTO.java new file mode 100644 index 0000000000..e16be96134 --- /dev/null +++ b/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; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserChartFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserChartFormDTO.java index 7d357089f6..b0b0db77d2 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserChartFormDTO.java +++ b/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; diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ComparisonResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ComparisonResultDTO.java new file mode 100644 index 0000000000..9310c125e1 --- /dev/null +++ b/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; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/MyNatListResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/MyNatListResultDTO.java index 355d52d213..59b0515e73 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/MyNatListResultDTO.java +++ b/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; + } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java index a93294b14f..bba32c13af 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatListResultDTO.java +++ b/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; + } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatUserInfoResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatUserInfoResultDTO.java index 5b0300f764..ef4b4e0eab 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatUserInfoResultDTO.java +++ b/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大类 中 某一类的 是否值,用于比较 同步数据结果确定是否要插入到表中 */ diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/OwnerRelationResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/OwnerRelationResultDTO.java index 9a3e0c23d7..8ec9b45ef1 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/OwnerRelationResultDTO.java +++ b/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; } } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RHZKStatisticsResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/RHZKStatisticsResultDTO.java new file mode 100644 index 0000000000..7407375a96 --- /dev/null +++ b/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; +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ResiComparisonListResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ResiComparisonListResultDTO.java new file mode 100644 index 0000000000..a25b565b80 --- /dev/null +++ b/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; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserChartResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserChartResultDTO.java index 12f87fd20d..fb484d72b7 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserChartResultDTO.java +++ b/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】 diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java index b24a4a9651..f8f29142a7 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java +++ b/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> renHuCondition(@RequestBody RHZKStatisticsFormDTO formDTO); + } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java index b675a7626b..e9103269aa 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java +++ b/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> renHuCondition(RHZKStatisticsFormDTO formDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "renHuCondition", formDTO); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java index 0ad814d722..3b843838e4 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java +++ b/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"; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java index a51390f16f..b146f047cd 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java +++ b/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 = ""; } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java index cbbc409d6b..737bf81727 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java +++ b/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(); + } + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiComparisonRecordController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiComparisonRecordController.java new file mode 100644 index 0000000000..10b14afe76 --- /dev/null +++ b/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> resiComparisonList(@LoginUser TokenDto tokenDto, @RequestBody ResiComparisonListFormDTO formDTO) { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + return new Result>().ok(icResiComparisonRecordService.resiComparisonList(formDTO)); + } + + /** + * @Author sun + * @Description 比对、批量比对、组织及下级比对 + **/ + @PostMapping("comparison") + public Result comparison(@LoginUser TokenDto tokenDto, @RequestBody ComparisonFormDTO formDTO) { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + return new Result().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 data = null; + List 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 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(); + } + } + } + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java index 429585d104..e38645b163 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java +++ b/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().ok(icResiUserService.getIcResiUserInfo(userId)); } + /** + * @Description 人户状况统计查询 + * @param tokenDto + * @Author zxc + * @Date 2022/11/16 09:22 + */ + @PostMapping("rhzk") + public Result renHuCondition(@LoginUser TokenDto tokenDto,@RequestBody RHZKStatisticsFormDTO formDTO){ + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setStaffId(tokenDto.getUserId()); + return new Result().ok(icResiUserService.renHuCondition(formDTO)); + } + + @PostMapping("rhzkList") + public Result> renHuConditionList(@RequestBody RHZKStatisticsFormDTO formDTO){ + return new Result>().ok(icResiUserService.renHuConditionList(formDTO)); + } + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiComparisonRecordDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiComparisonRecordDao.java new file mode 100644 index 0000000000..5eb830e9bf --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiComparisonRecordDao.java @@ -0,0 +1,44 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * 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. + *

+ * 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. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +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 { + + List getResiComparisonList(ResiComparisonListFormDTO formDTO); + + void saveInsert(@Param("list") List recordEntity); + + List getComparisonList(ComparisonFormDTO formDTO); +} \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java index 8caa220af2..23830a2e4c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java +++ b/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 { * @Date 2022/10/24 15:47 */ ResiAndLocalResiResultDTO getResiCount(@Param("agencyId")String agencyId,@Param("idCard")String idCard,@Param("customerId")String customerId); + + List getResiUserList(ComparisonFormDTO formDTO); + + List getUserByRenHu(RHZKStatisticsFormDTO formDTO); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java index c081011f88..54da37af06 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java +++ b/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 { void updateRelation(List list); void updateRelationOther(@Param("isLocalResiUser") String isLocalResiUser); + /** + * @Description 根据 身份证 + 疫苗接种时间 查询库里存在的 + * @param list + * @Author zxc + * @Date 2022/11/11 15:11 + */ + List getExistVaccine(@Param("list")List list); + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatCompareRecordEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatCompareRecordEntity.java index 75b18618fe..e87e4c3e3b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatCompareRecordEntity.java +++ b/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; /** * 联系地址:接口填入 diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java index 7cbe8cdd66..3246d9be0a 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatEntity.java +++ b/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; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiComparisonRecordEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiComparisonRecordEntity.java new file mode 100644 index 0000000000..ad290f5755 --- /dev/null +++ b/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; + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcVaccineEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcVaccineEntity.java index b17256f3a0..2a1121de34 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcVaccineEntity.java +++ b/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; + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/DataSyncEnum.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/DataSyncEnum.java index a3a66c4efc..438453f134 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/DataSyncEnum.java +++ b/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","其他"), ; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/RenHuConditionEnum.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/RenHuConditionEnum.java new file mode 100644 index 0000000000..a02850b7d6 --- /dev/null +++ b/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; + } +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcResiComparisonRecordExcel.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcResiComparisonRecordExcel.java new file mode 100644 index 0000000000..8bdf68cb39 --- /dev/null +++ b/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; + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java index b54c571f8f..b5b52f8ea4 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatImportExcelData.java +++ b/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 { diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java index 531e977ea7..04238846f5 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java @@ -171,6 +171,7 @@ public class IcNatCompareRecordExcelImportListener implements ReadListener executingListQuery = new LambdaQueryWrapper<>(); + executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING); + List 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 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 query = new LambdaQueryWrapper<>(); + query.eq(IcSyncJobEntity::getId, id); + + IcSyncJobEntity updateEntity = new IcSyncJobEntity(); + updateEntity.setOperationStatus(status); + icSyncJobDao.update(updateEntity, query); + } + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java new file mode 100644 index 0000000000..e53a279a46 --- /dev/null +++ b/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 executingListQuery = new LambdaQueryWrapper<>(); + executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING); + List 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 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 query = new LambdaQueryWrapper<>(); + query.eq(IcSyncJobEntity::getId, id); + + IcSyncJobEntity updateEntity = new IcSyncJobEntity(); + updateEntity.setOperationStatus(status); + icSyncJobDao.update(updateEntity, query); + } + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java index d7e44b58de..300128bc4d 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java @@ -112,7 +112,7 @@ public interface DataSyncConfigService extends BaseService */ void natInfoScanTask(DataSyncTaskParam formDTO); - void natInfoSyncButton(DataSyncTaskParam formDTO); + void submitSyncJob(DataSyncTaskParam formDTO); List getNatUserInfoFromDb(DataSyncTaskParam formDTO, int pageNo, int pageSize); @@ -121,8 +121,9 @@ public interface DataSyncConfigService extends BaseService * @param resiInfos * @param customerId * @param isSync + * @param jobType */ - void yantaiHsjcByDbView(List resiInfos, String customerId, String isSync); + void yanTaiDbViewByType(List resiInfos, String customerId, String isSync, String jobType); /** * 更新居民核酸检测信息(通过任务处理器) @@ -133,4 +134,12 @@ public interface DataSyncConfigService extends BaseService */ void execSyncByJobProcessor(IcSyncJobEntity jobEntity); + /** + * @Description 疫苗接种信息定时拉取 + * @param formDTO + * @Author zxc + * @Date 2022/11/11 16:56 + */ + void vaccineInfoScanTask(DataSyncTaskParam formDTO); + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiComparisonRecordService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiComparisonRecordService.java new file mode 100644 index 0000000000..fe49e4e884 --- /dev/null +++ b/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 { + + PageData resiComparisonList(ResiComparisonListFormDTO formDTO); + + ComparisonResultDTO comparison(ComparisonFormDTO formDTO); + + void comparisonUserData(IcSyncJobEntity jobEntity); + + void comparisonUpdate(ComparisonFormDTO formDTO); +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java index 246f87a15d..f346f2c3b1 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java @@ -525,4 +525,15 @@ public interface IcResiUserService extends BaseService { 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 renHuConditionList(RHZKStatisticsFormDTO formDTO); + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index 4010a1c231..b8b9300d2b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/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 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 qw = new LambdaQueryWrapper<>(); qw.eq(IcSyncJobEntity::getOrgId,formDTO.getAgencyId()) + .eq(IcSyncJobEntity::getJobType,formDTO.getJobType()) .in(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING,OPERATION_STATUS_PROCESSING); List icSyncJobEntities = icSyncJobDao.selectList(qw); // 当前组织下存在同步任务 @@ -433,43 +440,10 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl waitList; - //do { - // LambdaQueryWrapper 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 resiInfos, String customerId, String isSync) { - List> resiInfobatchs = ListUtils.partition(resiInfos, 50); - for (List resibatch : resiInfobatchs) { + public void yanTaiDbViewByType(List resiInfos, String customerId, String isSync, String jobType) { + List> resiInfoBatchs = ListUtils.partition(resiInfos, 50); + for (List 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 resiInfos, String customerId, String isSync){ + // 将居民信息转化为的map + Map idCardAndResiInfoMap = resiInfos.stream().collect(Collectors.toMap(resi -> resi.getIdCard(), Function.identity())); + List idCards = new ArrayList<>(idCardAndResiInfoMap.keySet()); + // 1.获取核酸采样信息 + Map 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 vaccineList = JSON.parseArray(json,Map.class); + List> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList( + "select data, name, cardno, vaccineCount from t_ymjz_info where cardno in (:idcards)", args); + List 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 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 data = (Map) v.get("data"); + //if (data.containsKey("vaccineList")){ + // List vaccineList1 = JSON.parseArray(data.get("vaccineList").toString(), YTVaccineListDTO.class); + // vaccineList1.forEach(v1 -> { + // v1.setCardno(v.get("cardno").toString()); + // }); + // ytVaccineListDTOS.addAll(vaccineList1); + //} + } + }); + List entities = new ArrayList<>(); + + // 过滤已存在的记录 + List existVaccines = icVaccineDao.getExistVaccine(ytVaccineListFromApi); + if (CollectionUtils.isNotEmpty(existVaccines)){ + for (YTVaccineListDTO existVaccineItem : existVaccines) { + Iterator 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 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 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 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); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java index 503669e07f..18071df16c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java +++ b/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 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 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); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiComparisonRecordServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiComparisonRecordServiceImpl.java new file mode 100644 index 0000000000..1bee3c6542 --- /dev/null +++ b/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 implements IcResiComparisonRecordService, ResultDataResolver { + @Autowired + private IcResiUserDao icResiUserDao; + @Autowired + private IcSyncJobDao icSyncJobDao; + + + @Override + public PageData 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 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 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 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 data = null; + formDTO.setIsPage(false); + formDTO.setPageSize(NumConstant.ONE_THOUSAND); + int pageNo = formDTO.getPageNo(); + do { + data = getResiUserList(formDTO); + List 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 data = null; + formDTO.setIsPage(false); + formDTO.setPageSize(NumConstant.ONE_THOUSAND); + int pageNo = formDTO.getPageNo(); + do { + data = getResiUserList(formDTO); + List 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 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 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 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 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 getComparisonList(ComparisonFormDTO formDTO) { + PageInfo data = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()) + .doSelectPageInfo(() -> baseDao.getComparisonList(formDTO)); + return new PageData(data.getList(), data.getTotal()); + } + + private PageData getResiUserList(ComparisonFormDTO formDTO) { + PageInfo 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); + } + + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index 414ddcaa80..3e341bf86b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/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 getWrapper(Map params) { @@ -1478,6 +1484,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl 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 renHuConditionList(RHZKStatisticsFormDTO formDTO) { + if (CollectionUtils.isEmpty(formDTO.getOrgIds())){ + return new ArrayList<>(); + } + List 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); + } + } diff --git a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.88__ic_resi_comparison_record.sql b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.88__ic_resi_comparison_record.sql new file mode 100644 index 0000000000..3e05ced2fc --- /dev/null +++ b/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='居民信息与公安部信息比对记录表'; diff --git a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__alter_ic_nat.sql b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__alter_ic_nat.sql new file mode 100644 index 0000000000..7925891a55 --- /dev/null +++ b/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`; + diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx b/epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx index 524d327bd7..de671285c6 100644 Binary files a/epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx and b/epmet-user/epmet-user-server/src/main/resources/excel/ic_nat.xlsx differ diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml index 911b5102bd..7b0e96f023 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml @@ -70,7 +70,8 @@ ${categoryColumn} AS categoryColumn, - pids + pids, + mobile FROM ic_resi_user WHERE DEL_FLAG = '0' diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecRelationDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecRelationDao.xml index e3f58f05b1..95ebe37015 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecRelationDao.xml +++ b/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} + AND r.IMPORT_DATE = #{importDate} + \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecordDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecordDao.xml index 897493f745..420e585117 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecordDao.xml +++ b/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 diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml index f6daee080d..243fbebcd7 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml +++ b/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 diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiComparisonRecordDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiComparisonRecordDao.xml new file mode 100644 index 0000000000..1301e1c4b3 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiComparisonRecordDao.xml @@ -0,0 +1,114 @@ + + + + + + + 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 + + ( + 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() + ) + + 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) + + + + + + + + \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index 9c48f39c2f..ec51178649 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -182,6 +182,7 @@ + @@ -1359,6 +1373,18 @@ AND (is_floating != '0' or is_floating is null) + + AND RHZK = 'rhyz' + + + AND RHZK = 'rzhbz' + + + AND RHZK = 'hzrbz' + + + AND(RHZK = '' or RHZK IS null) + AND (agency_id = #{orgId} OR pids LIKE CONCAT('%', #{orgId}, '%')) @@ -1402,4 +1428,60 @@ AND ID_CARD = #{idCard} + + + + + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml index a580d72a00..d5aeb1384d 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml +++ b/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 ='') + + +