wangxianzhang 3 years ago
parent
commit
5999ecc94b
  1. 39
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/YtSfhyxxcxdsjjResDTO.java
  2. 35
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/YtHsResUtils.java
  3. 3
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java
  4. 105
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcResiComparisonRecordDTO.java
  5. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTVaccineListDTO.java
  6. 33
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ComparisonFormDTO.java
  7. 39
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/ResiComparisonListFormDTO.java
  8. 20
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ComparisonResultDTO.java
  9. 70
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/ResiComparisonListResultDTO.java
  10. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java
  11. 14
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java
  12. 136
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiComparisonRecordController.java
  13. 44
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiComparisonRecordDao.java
  14. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  15. 71
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiComparisonRecordEntity.java
  16. 64
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcResiComparisonRecordExcel.java
  17. 119
      epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java
  18. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java
  19. 27
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiComparisonRecordService.java
  20. 66
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java
  21. 6
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java
  22. 361
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiComparisonRecordServiceImpl.java
  23. 21
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.88__ic_resi_comparison_record.sql
  24. 2
      epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecRelationDao.xml
  25. 114
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiComparisonRecordDao.xml
  26. 21
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml
  27. 2
      epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml

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

@ -0,0 +1,39 @@
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 String msg = "请求成功";
/**
* 响应数据
*/
private YtSfhyxxcxdsjjDetail data;
private int total;
@Data
public static class YtSfhyxxcxdsjjDetail {
private String status = "000";
private String statusMsg = "正常返回";
private String count = "1";
//结果数量
private String total;
private List<Result> result;
}
@Data
public static class Result {
//身份证号
private String GMSFHM;
//姓名
private String XM;
}
}

35
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,40 @@ public class YtHsResUtils {
return failResult;
}
/**
* desc:根据身份证号和姓名查询公安部备案信息
*
* @return
*/
public static YtSfhyxxcxdsjjResDTO sfhyxxcxdsjj(String gmsfhm, String xm) {
try {
tryAcquire("sfhyxxcxdsjj");
Map<String, Object> param = new HashMap<>();
param.put(APP_KEY, "RhOHlu7Bmkrj8Vk7uGTNNxHqI");
param.put("gmsfhm", gmsfhm);
param.put("xm", xm);
log.info("sfhyxxcxdsjj api param:{}", param);
Result<String> result = HttpClientManager.getInstance().sendGet(SERVER_URL + "sfhyxxcxdsjj", param);
log.info("sfhyxxcxdsjj api result:{}", JSON.toJSONString(result));
if (result.success()) {
String data = result.getData();
JSONObject jsonObject = JSON.parseObject(data);
if (jsonObject != null && StrConstant.HTTP_STATUS_OK.equals(jsonObject.getString(StrConstant.HTTP_RESP_CODE))) {
return JSON.parseObject(result.getData(), YtSfhyxxcxdsjjResDTO.class);
} else {
log.warn("sfhyxxcxdsjj 烟台公安部居民基础信息调用失败");
}
}
} catch (Exception e) {
log.error(String.format("烟台公民基本信息查询异常gmsfhm:%s", gmsfhm), e);
}
YtSfhyxxcxdsjjResDTO resultResult = new YtSfhyxxcxdsjjResDTO();
resultResult.setData(new YtSfhyxxcxdsjjResDTO.YtSfhyxxcxdsjjDetail());
return resultResult;
}
public static void main(String[] args) {
//YtDataSyncResDTO canji = canji("123", "123");

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

@ -131,7 +131,8 @@ public class IcNatCompareRecordDTO implements Serializable {
private String agencyName;
/**
*
* 内部备注开发人员用
*/
@ExcelIgnore
private String internalRemark;
}

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

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

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

@ -12,7 +12,7 @@ import java.io.Serializable;
public class YTVaccineListDTO implements Serializable {
private static final long serialVersionUID = -5583350277850076659L;
private String idCard;
private String cardno;
/**
* 接种时间

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

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

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

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

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

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

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

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

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

@ -21,6 +21,8 @@ public interface EpidemicConstant {
*/
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";

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

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

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

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

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

3
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,6 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
* @Date 2022/10/24 15:47
*/
ResiAndLocalResiResultDTO getResiCount(@Param("agencyId")String agencyId,@Param("idCard")String idCard,@Param("customerId")String customerId);
List<IcResiUserDTO> getResiUserList(ComparisonFormDTO formDTO);
}

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

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

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

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

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

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

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

@ -112,7 +112,7 @@ public interface DataSyncConfigService extends BaseService<DataSyncConfigEntity>
*/
void natInfoScanTask(DataSyncTaskParam formDTO);
void natInfoSyncButton(DataSyncTaskParam formDTO);
void submitSyncJob(DataSyncTaskParam formDTO);
List<NatUserInfoResultDTO> getNatUserInfoFromDb(DataSyncTaskParam formDTO, int pageNo, int pageSize);

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

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

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

@ -411,7 +411,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
*/
@Override
public void natInfoSyncButton(DataSyncTaskParam formDTO) {
public void submitSyncJob(DataSyncTaskParam formDTO) {
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId());
if (null == agencyInfo){
throw new EpmetException("未查询到组织信息:"+formDTO.getAgencyId());
@ -1071,30 +1071,58 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
args.put("idcards", idCards);
// todo 疫苗接种视图
String json = "[\n" +
"{\n" +
"\t\"idCard\":\"370785195001012558\",\n" +
"\t\"inoculateDate\":\"2023-01-01 10:01\",\n" +
"\t\"lastStationName\":\"北京\"\n" +
"},\n" +
"{\n" +
"\t\"idCard\":\"370785195001012558\",\n" +
"\t\"inoculateDate\":\"2022-01-01 10:01\",\n" +
"\t\"lastStationName\":\"南京\"\n" +
"}\n" +
" {\n" +
" \"id\": \"751956862490071040\",\n" +
" \"cardno\": \"370785195001012558\",\n" +
" \"name\": \"李国玺\",\n" +
" \"data\":\n" +
" {\n" +
" \"vaccineList\":\n" +
" [\n" +
" {\n" +
" \"vaccineCount\": \"1\",\n" +
" \"inoculateDate\": \"2021-04-24 16:02:46\",\n" +
" \"lastStationName\": \"烟台市只楚医院临时接种点\"\n" +
" },\n" +
" {\n" +
" \"vaccineCount\": \"2\",\n" +
" \"inoculateDate\": \"2021-06-10 16:20:30\",\n" +
" \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" +
" },\n" +
" {\n" +
" \"vaccineCount\": \"3\",\n" +
" \"inoculateDate\": \"2021-12-10 15:12:24\",\n" +
" \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" +
" }\n" +
" ],\n" +
" \"flag\": 1\n" +
" },\n" +
" \"vaccineCount\": 3\n" +
" }\n" +
"]";
List<Map<String, Object>> vaccineList = new ArrayList<>();/*yantaiNamedParamLantuJdbcTemplate.queryForList(
"select id, name,card_no, create_time from hscyxxb where card_no in (:idcards)", args);*/
Map<String, Object> m = new HashMap<>();
vaccineList.add(m);
// List<Map> vaccineList = JSON.parseArray(json,Map.class);
List<Map<String,Object>> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList(
"select data, name, card_no, vaccineCount from t_ymjz_info where card_no in (:idcards)", args);
List<YTVaccineListDTO> ytVaccineListDTOS = new ArrayList<>();
if (CollectionUtils.isNotEmpty(vaccineList)) {
vaccineList.forEach(v -> {
if (v.containsKey("data")){
Map<String, Object> data = (Map<String, Object>) v.get("data");
if (data.containsKey("vaccineList")){
List<YTVaccineListDTO> vaccineList1 = JSON.parseArray(data.get("vaccineList").toString(), YTVaccineListDTO.class);
vaccineList1.forEach(v1 -> {
v1.setCardno(v.get("cardno").toString());
});
ytVaccineListDTOS.addAll(vaccineList1);
}
}
});
List<IcVaccineEntity> entities = new ArrayList<>();
// List<YTVaccineListDTO> ytVaccineListDTOS = ConvertUtils.sourceToTarget(vaccineList, YTVaccineListDTO.class);
List<YTVaccineListDTO> ytVaccineListDTOS = JSON.parseArray(json,YTVaccineListDTO.class);
List<YTVaccineListDTO> existVaccine = icVaccineDao.getExistVaccine(ytVaccineListDTOS);
if (CollectionUtils.isNotEmpty(existVaccine)){
for (YTVaccineListDTO e : existVaccine) {
for (int i = 0; i < ytVaccineListDTOS.size(); i++) {
if (ytVaccineListDTOS.get(i).getIdCard().equals(e.getIdCard()) && ytVaccineListDTOS.get(i).getInoculateDate().equals(e.getInoculateDate())){
if (ytVaccineListDTOS.get(i).getCardno().equals(e.getCardno()) && ytVaccineListDTOS.get(i).getInoculateDate().equals(e.getInoculateDate())){
ytVaccineListDTOS.remove(i);
}
}
@ -1103,7 +1131,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
if (CollectionUtils.isNotEmpty(ytVaccineListDTOS)){
ytVaccineListDTOS.forEach(v -> {
resiInfos.forEach(u -> {
if (v.getIdCard().equals(u.getIdCard())){
if (v.getCardno().equals(u.getIdCard())){
IcVaccineEntity e = new IcVaccineEntity();
e.setCustomerId(customerId);
e.setName(u.getName());

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

@ -285,7 +285,8 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
.set(IcNatCompareRecordEntity::getLatestImportTime, origin.getLatestImportTime())
.set(IcNatCompareRecordEntity::getInternalRemark, origin.getInternalRemark());
baseDao.update(null,updateWrapper);
IcNatCompareRecRelationEntity existRelationEntity=icNatCompareRecRelationDao.selectExist(data.getCustomerId(),origin.getId(),staffInfo.getAgencyId(),importDate);
// 关系表 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())) {
@ -295,9 +296,12 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
}
//记录最后一次导入时间、最近一次操作人id,最近一次操作人姓名
existRelationEntity.setImportTime(importTime);
existRelationEntity.setImportDate(importDate);
existRelationEntity.setStaffId(staffInfo.getStaffId());
existRelationEntity.setStaffName(staffInfo.getRealName());
existRelationEntity.setAgencyName(staffInfo.getAgencyName());
existRelationEntity.setUpdatedBy(staffInfo.getStaffId());
existRelationEntity.setUpdatedTime(importTime);
icNatCompareRecRelationDao.updateById(existRelationEntity);
}else{
IcNatCompareRecRelationEntity relationEntity = new IcNatCompareRecRelationEntity();

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

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

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

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

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

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

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

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

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

@ -1402,4 +1402,25 @@
AND ID_CARD = #{idCard}
</select>
<select id="getResiUserList" resultType="com.epmet.dto.IcResiUserDTO">
SELECT
a.id,
a.customer_id,
a.`name`,
a.id_card
FROM
ic_resi_user a
LEFT JOIN ic_resi_comparison_record b on a.id = b.RESI_ID
WHERE
a.del_flag = '0'
AND a.pids LIKE CONCAT('%',#{agencyId},'%')
<if test='null != userIdList and userIdList.size() > 0'>
<foreach collection="userIdList" item="id" open="AND a.id IN (" separator="," close=")">
#{id}
</foreach>
</if>
AND b.id is null
order by a.pids ASC, a.created_time DESC
</select>
</mapper>

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

@ -236,7 +236,7 @@
WHERE DEL_FLAG = '0'
AND (
<foreach collection="list" item="l" separator=" OR ">
(ID_CARD = #{l.idCard} AND DATE_FORMAT(INOCULATE_TIME, '%Y-%m-%d %H:%i') = #{l.inoculateDate})
(ID_CARD = #{l.cardno} AND DATE_FORMAT(INOCULATE_TIME, '%Y-%m-%d %H:%i') = #{l.inoculateDate})
</foreach>
)
</select>

Loading…
Cancel
Save