wangxianzhang 3 years ago
parent
commit
3233d9798c
  1. 7
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNatCompareRecordDTO.java
  2. 27
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTVaccineListDTO.java
  3. 6
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/DataSyncTaskParam.java
  4. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/NatUserInfoResultDTO.java
  5. 3
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  6. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  7. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java
  8. 12
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/DataSyncConfigController.java
  9. 9
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java
  10. 49
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNatCompareRecordEntity.java
  11. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcVaccineEntity.java
  12. 1
      epmet-user/epmet-user-server/src/main/java/com/epmet/enums/DataSyncEnum.java
  13. 14
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcNatCompareRecordExcelImportListener.java
  14. 112
      epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java
  15. 11
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/DataSyncConfigService.java
  16. 215
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java
  17. 18
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatCompareRecordServiceImpl.java
  18. 3
      epmet-user/epmet-user-server/src/main/resources/mapper/DataSyncConfigDao.xml
  19. 3
      epmet-user/epmet-user-server/src/main/resources/mapper/IcNatCompareRecordDao.xml
  20. 14
      epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml

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

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

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

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

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

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

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

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

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

@ -952,4 +952,7 @@ public interface EpmetUserOpenFeignClient {
@PostMapping("/epmetuser/dataSyncConfig/disabilityInfoScanTask") @PostMapping("/epmetuser/dataSyncConfig/disabilityInfoScanTask")
Result disabilityInfoScanTask(@RequestBody DataSyncTaskParam formDTO); Result disabilityInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
@PostMapping("/epmetuser/dataSyncConfig/vaccineInfoScanTask")
Result vaccineInfoScanTask(@RequestBody DataSyncTaskParam formDTO);
} }

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

@ -741,4 +741,9 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result disabilityInfoScanTask(DataSyncTaskParam formDTO) { public Result disabilityInfoScanTask(DataSyncTaskParam formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "disabilityInfoScanTask", 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);
}
} }

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

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

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

@ -156,4 +156,16 @@ public class DataSyncConfigController {
return new Result(); 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();
}
} }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -11,7 +11,6 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.dto.form.PageFormDTO; 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.YtDataSyncResDTO;
import com.epmet.commons.tools.dto.result.YtHscyResDTO; import com.epmet.commons.tools.dto.result.YtHscyResDTO;
import com.epmet.commons.tools.dto.result.YtHsjcResDTO; import com.epmet.commons.tools.dto.result.YtHsjcResDTO;
@ -21,7 +20,6 @@ import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis; 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.AgencyInfoCache;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
@ -32,9 +30,11 @@ import com.epmet.constant.EpidemicConstant;
import com.epmet.dao.DataSyncConfigDao; import com.epmet.dao.DataSyncConfigDao;
import com.epmet.dao.IcNatDao; import com.epmet.dao.IcNatDao;
import com.epmet.dao.IcSyncJobDao; import com.epmet.dao.IcSyncJobDao;
import com.epmet.dao.IcVaccineDao;
import com.epmet.dto.DataSyncConfigDTO; import com.epmet.dto.DataSyncConfigDTO;
import com.epmet.dto.DataSyncRecordDeathDTO; import com.epmet.dto.DataSyncRecordDeathDTO;
import com.epmet.dto.DataSyncRecordDisabilityDTO; import com.epmet.dto.DataSyncRecordDisabilityDTO;
import com.epmet.dto.YTVaccineListDTO;
import com.epmet.dto.form.ConfigSwitchFormDTO; import com.epmet.dto.form.ConfigSwitchFormDTO;
import com.epmet.dto.form.DataSyncTaskParam; import com.epmet.dto.form.DataSyncTaskParam;
import com.epmet.dto.form.ScopeSaveFormDTO; import com.epmet.dto.form.ScopeSaveFormDTO;
@ -48,7 +48,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@ -59,7 +58,6 @@ import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -95,6 +93,12 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
private IcSyncJobDao icSyncJobDao; private IcSyncJobDao icSyncJobDao;
@Autowired @Autowired
private DistributedLock distributedLock; private DistributedLock distributedLock;
@Autowired
private IcVaccineService icVaccineService;
@Autowired
private IcVaccineRelationService icVaccineRelationService;
@Autowired
private IcVaccineDao icVaccineDao;
@Resource(name = "yantaiNamedParamLantuJdbcTemplate") @Resource(name = "yantaiNamedParamLantuJdbcTemplate")
private NamedParameterJdbcTemplate yantaiNamedParamLantuJdbcTemplate; private NamedParameterJdbcTemplate yantaiNamedParamLantuJdbcTemplate;
@ -378,7 +382,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
case HE_SUAN: case HE_SUAN:
try { try {
//查询正常状态的居民 //查询正常状态的居民
yantaiHsjcByDbView(dbResiList, config.getCustomerId(), formDTO.getIsSync()); yanTaiDbViewByType(dbResiList, config.getCustomerId(), formDTO.getIsSync(), JOB_TYPE_NAT);
log.info("======核酸检测信息拉取结束======"); log.info("======核酸检测信息拉取结束======");
} catch (Exception e) { } catch (Exception e) {
log.error("nat thread execute exception", e); log.error("nat thread execute exception", e);
@ -393,7 +397,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
if (CollectionUtils.isEmpty(dbResiList)){ if (CollectionUtils.isEmpty(dbResiList)){
return; return;
} }
yantaiHsjcByDbView(dbResiList, dbResiList.get(NumConstant.ZERO).getCustomerId(), formDTO.getIsSync()); yanTaiDbViewByType(dbResiList, dbResiList.get(NumConstant.ZERO).getCustomerId(), formDTO.getIsSync(),JOB_TYPE_NAT);
} }
pageNo++; pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize); } while (dbResiList != null && dbResiList.size() == pageSize);
@ -408,10 +412,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
*/ */
@Override @Override
public void natInfoSyncButton(DataSyncTaskParam formDTO) { public void natInfoSyncButton(DataSyncTaskParam formDTO) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staffInfo){
throw new EpmetException("未查询到工作人员信息:"+formDTO.getStaffId());
}
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId()); AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId());
if (null == agencyInfo){ if (null == agencyInfo){
throw new EpmetException("未查询到组织信息:"+formDTO.getAgencyId()); throw new EpmetException("未查询到组织信息:"+formDTO.getAgencyId());
@ -420,6 +420,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
// 查询该组织是否存在等待中或者进行中的任务 // 查询该组织是否存在等待中或者进行中的任务
LambdaQueryWrapper<IcSyncJobEntity> qw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<IcSyncJobEntity> qw = new LambdaQueryWrapper<>();
qw.eq(IcSyncJobEntity::getOrgId,formDTO.getAgencyId()) qw.eq(IcSyncJobEntity::getOrgId,formDTO.getAgencyId())
.eq(IcSyncJobEntity::getJobType,formDTO.getJobType())
.in(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING,OPERATION_STATUS_PROCESSING); .in(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING,OPERATION_STATUS_PROCESSING);
List<IcSyncJobEntity> icSyncJobEntities = icSyncJobDao.selectList(qw); List<IcSyncJobEntity> icSyncJobEntities = icSyncJobDao.selectList(qw);
// 当前组织下存在同步任务 // 当前组织下存在同步任务
@ -433,43 +434,10 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
e.setOrgId(formDTO.getAgencyId()); e.setOrgId(formDTO.getAgencyId());
e.setPid(agencyInfo.getPid()); e.setPid(agencyInfo.getPid());
e.setOrgIdPath(StringUtils.isBlank(agencyInfo.getPids()) ? agencyInfo.getId() : agencyInfo.getPids()+":"+agencyInfo.getId()); e.setOrgIdPath(StringUtils.isBlank(agencyInfo.getPids()) ? agencyInfo.getId() : agencyInfo.getPids()+":"+agencyInfo.getId());
e.setJobType(JOB_TYPE_NAT); e.setJobType(formDTO.getJobType());
e.setOperatorId(formDTO.getStaffId()); e.setOperatorId(formDTO.getStaffId());
e.setOperationStatus(OPERATION_STATUS_WAITING); e.setOperationStatus(OPERATION_STATUS_WAITING);
insertSync(e); insertSync(e);
//List<IcSyncJobEntity> waitList;
//do {
// LambdaQueryWrapper<IcSyncJobEntity> qw3 = new LambdaQueryWrapper<>();
// qw3.eq(IcSyncJobEntity::getCustomerId,formDTO.getCustomerId())
// .eq(IcSyncJobEntity::getOperationStatus,OPERATION_STATUS_WAITING)
// .eq(IcSyncJobEntity::getJobType,JOB_TYPE_NAT)
// .orderByAsc(BaseEpmetEntity::getCreatedTime);
// waitList = icSyncJobDao.selectList(qw3);
// if (CollectionUtils.isNotEmpty(waitList)){
// for (IcSyncJobEntity entity : waitList) {
// RLock lock = null;
// try {
// lock = distributedLock.getLock(entity.getOrgId() + JOB_TYPE_NAT, 60L, 60L, TimeUnit.SECONDS);
// updateSync(entity.getId(),OPERATION_STATUS_PROCESSING);
// }catch (Exception ex){
// log.error(ex.getMessage());
// throw new EpmetException(ex.getMessage());
// }finally {
// lock.unlock();
// }
// formDTO.setAgencyId(entity.getOrgId());
// try {
// natInfoScanTask(formDTO);
// }catch (Exception ee){
// log.error(ee.getMessage());
// throw new EpmetException(ee.getMessage());
// }finally {
// updateSync(entity.getId(),OPERATION_STATUS_FINISH);
// }
// }
// }
//}while (CollectionUtils.isNotEmpty(waitList));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -532,7 +500,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
try { try {
//查询正常状态的居民 //查询正常状态的居民
//hsjc(finalDbResiList, config.getCustomerId(), formDTO.getIsSync()); //hsjc(finalDbResiList, config.getCustomerId(), formDTO.getIsSync());
yantaiHsjcByDbView(finalDbResiList, config.getCustomerId(), formDTO.getIsSync()); yanTaiDbViewByType(finalDbResiList, config.getCustomerId(), formDTO.getIsSync(), JOB_TYPE_NAT);
log.info("======核酸检测信息拉取结束======"); log.info("======核酸检测信息拉取结束======");
} catch (Exception e) { } catch (Exception e) {
log.error("hsjc thread execute exception", e); log.error("hsjc thread execute exception", e);
@ -1062,15 +1030,110 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
* @param customerId * @param customerId
* @param isSync * @param isSync
*/ */
public void yantaiHsjcByDbView(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync) { public void yanTaiDbViewByType(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync, String jobType) {
List<List<NatUserInfoResultDTO>> resiInfobatchs = ListUtils.partition(resiInfos, 50); List<List<NatUserInfoResultDTO>> resiInfoBatchs = ListUtils.partition(resiInfos, 50);
for (List<NatUserInfoResultDTO> resibatch : resiInfobatchs) { for (List<NatUserInfoResultDTO> resiBatch : resiInfoBatchs) {
// n个一批,来处理他们的核酸信息,太多怕给数据库查崩了。 // n个一批,来处理他们的核酸信息,太多怕给数据库查崩了。
try { 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) { } catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e); String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【更新核酸检测信息(from 兰图)】失败,信息:{}", errorMsg); log.error("【更新{}信息(from 兰图)】失败,信息:{}", jobType, errorMsg);
}
}
}
/**
* @Description 疫苗接种信息处理
* @param resiInfos
* @param customerId
* @param isSync
* @Author zxc
* @Date 2022/11/11 11:07
*/
public void yanTaiVaccineByDbViewPartition(List<NatUserInfoResultDTO> resiInfos, String customerId, String isSync){
// 将居民信息转化为<idCard,resiInfo>的map
Map<String, NatUserInfoResultDTO> idCardAndResiInfoMap = resiInfos.stream().collect(Collectors.toMap(resi -> resi.getIdCard(), Function.identity()));
List<String> idCards = new ArrayList<>(idCardAndResiInfoMap.keySet());
// 1.获取核酸采样信息
Map<String, Object> args = new HashMap<>();
args.put("idcards", idCards);
// todo 疫苗接种视图
String json = "[\n" +
"{\n" +
"\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" +
"]";
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);
if (CollectionUtils.isNotEmpty(vaccineList)) {
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())){
ytVaccineListDTOS.remove(i);
}
}
}
}
if (CollectionUtils.isNotEmpty(ytVaccineListDTOS)){
ytVaccineListDTOS.forEach(v -> {
resiInfos.forEach(u -> {
if (v.getIdCard().equals(u.getIdCard())){
IcVaccineEntity e = new IcVaccineEntity();
e.setCustomerId(customerId);
e.setName(u.getName());
e.setMobile(u.getMobile());
e.setIdCard(u.getIdCard());
e.setIsResiUser(StringUtils.isBlank(u.getUserId()) ? NumConstant.ZERO_STR : NumConstant.ONE_STR);
e.setUserId(StringUtils.isBlank(u.getUserId()) ? "" : u.getUserId());
e.setUserType("ytPull");
e.setInoculateTime(DateUtils.parseDate(v.getInoculateDate(),DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE));
e.setInoculateAddress(v.getLastStationName());
e.setAgencyId(u.getAgencyId());
e.setPids(u.getPids());
entities.add(e);
}
});
});
icVaccineService.insertBatch(entities,NumConstant.ONE_HUNDRED);
List<IcVaccineRelationEntity> relationEntities = new ArrayList<>();
entities.forEach(e -> {
IcVaccineRelationEntity re = new IcVaccineRelationEntity();
re.setIcVaccineId(e.getAgencyId());
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);
} }
} }
} }
@ -1197,14 +1260,62 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl<DataSyncConfigDao
int updatedResiCount = 0; int updatedResiCount = 0;
log.info("【任务处理器同步数据】组织Id:{},开始同步数据,同步类型:{}", jobEntity.getOrgId(), jobEntity.getJobType()); log.info("【任务处理器同步数据】组织Id:{},开始同步数据,同步类型:{}", jobEntity.getOrgId(), jobEntity.getJobType());
do { do {
// 分页,一次查询1000居民,循环更新他们的核酸检测信息 // 分页,一次查询 1000 居民,循环更新他们的核酸检测信息
resis = getNatUserInfoFromDb(p, pageNo, pageSize); resis = getNatUserInfoFromDb(p, pageNo, pageSize);
if (CollectionUtils.isNotEmpty(resis)) { if (CollectionUtils.isNotEmpty(resis)) {
yantaiHsjcByDbView(resis, jobEntity.getCustomerId(), NumConstant.ONE_STR); yanTaiDbViewByType(resis, jobEntity.getCustomerId(), NumConstant.ONE_STR, jobEntity.getJobType());
pageNo++; pageNo++;
updatedResiCount += resis.size(); updatedResiCount += resis.size();
} }
} while (CollectionUtils.isNotEmpty(resis)); } while (CollectionUtils.isNotEmpty(resis));
log.info("【任务处理器同步数据】组织Id:{},同步类型:{},已完成居民数:{}", jobEntity.getOrgId(), jobEntity.getJobType(), updatedResiCount); log.info("【任务处理器同步数据】组织Id:{},同步类型:{},已完成居民数:{}", jobEntity.getOrgId(), jobEntity.getJobType(), updatedResiCount);
} }
/**
* @Description 疫苗接种信息定时拉取
* @param formDTO
* @Author zxc
* @Date 2022/11/11 16:56
*/
@Override
public void vaccineInfoScanTask(DataSyncTaskParam formDTO) {
List<DataSyncConfigDTO> configData = getConfigData(null, EpidemicConstant.DATA_CODE_VACCINE);
if (CollectionUtils.isEmpty(configData)){
log.warn("vaccineInfoScanTask not exists config data ");
return;
}
long count = configData.stream().filter(o -> CollectionUtils.isNotEmpty(o.getScopeList())).count();
if (count < 1) {
log.warn("vaccineInfoScanTask scopeList is null");
return;
}
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.ONE_THOUSAND;
List<NatUserInfoResultDTO> dbResiList = null;
do {
for (DataSyncConfigDTO config : configData) {
// 设置查询数据范围
formDTO.setOrgList(config.getScopeList());
DataSyncEnum anEnum = DataSyncEnum.getEnum(config.getDataCode());
dbResiList = getNatUserInfoFromDb(formDTO, pageNo, pageSize);
if (CollectionUtils.isEmpty(dbResiList)) {
continue;
}
switch (anEnum) {
case VACCINE:
try {
//查询正常状态的居民
yanTaiVaccineByDbViewPartition(dbResiList,config.getCustomerId(),NumConstant.ZERO_STR);
log.info("======vaccine信息拉取结束======");
} catch (Exception e) {
log.error("vaccine thread execute exception", e);
}
break;
default:
log.warn("没有要处理的数据");
}
}
pageNo++;
} while (dbResiList != null && dbResiList.size() == pageSize);
}
} }

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

@ -1,6 +1,7 @@
package com.epmet.service.impl; package com.epmet.service.impl;
import com.alibaba.excel.EasyExcel; 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.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
@ -227,7 +228,7 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void persisNat(IcNatCompareRecordEntity data, CustomerStaffInfoCacheResult staffInfo, String importDate, Date importTime) { public void persisNat(IcNatCompareRecordEntity data, CustomerStaffInfoCacheResult staffInfo, String importDate, Date importTime) {
// 查询是否本辖区居民 // 查询是否本辖区居民 没有限制status='0'
IcResiUserDTO icResiUserDTO = SpringContextUtils.getBean(IcResiUserService.class).getByIdCard(data.getCustomerId(), data.getIdCard(), null); IcResiUserDTO icResiUserDTO = SpringContextUtils.getBean(IcResiUserService.class).getByIdCard(data.getCustomerId(), data.getIdCard(), null);
AgencyInfoCache agencyInfoCache = CustomerOrgRedis.getAgencyInfo(staffInfo.getAgencyId()); AgencyInfoCache agencyInfoCache = CustomerOrgRedis.getAgencyInfo(staffInfo.getAgencyId());
//根据身份证号判断是否存在基础信息 //根据身份证号判断是否存在基础信息
@ -270,7 +271,20 @@ public class IcNatCompareRecordServiceImpl extends BaseServiceImpl<IcNatCompareR
// 是否客户下居民(0:否 1:是) // 是否客户下居民(0:否 1:是)
origin.setIsResiUser(StringUtils.isNotBlank(origin.getIcResiUserId()) ? NumConstant.ONE_STR : NumConstant.ZERO_STR); origin.setIsResiUser(StringUtils.isNotBlank(origin.getIcResiUserId()) ? NumConstant.ONE_STR : NumConstant.ZERO_STR);
origin.setLatestImportTime(importTime); origin.setLatestImportTime(importTime);
baseDao.updateById(origin); LambdaUpdateWrapper<IcNatCompareRecordEntity> updateWrapper=new LambdaUpdateWrapper<>();
updateWrapper.eq(IcNatCompareRecordEntity::getId,origin.getId());
updateWrapper.set(IcNatCompareRecordEntity::getName, origin.getName())
.set(IcNatCompareRecordEntity::getMobile, origin.getMobile())
.set(IcNatCompareRecordEntity::getIsResiUser, origin.getIsResiUser())
.set(IcNatCompareRecordEntity::getIcResiUserId, origin.getIcResiUserId())
.set(IcNatCompareRecordEntity::getLatestCyTime, origin.getLatestCyTime())
.set(IcNatCompareRecordEntity::getLatestNatTime, origin.getLatestNatTime())
.set(IcNatCompareRecordEntity::getNatResult, origin.getNatResult())
.set(IcNatCompareRecordEntity::getNatAddress, origin.getNatAddress())
.set(IcNatCompareRecordEntity::getContactAddress, origin.getContactAddress())
.set(IcNatCompareRecordEntity::getLatestImportTime, origin.getLatestImportTime())
.set(IcNatCompareRecordEntity::getInternalRemark, origin.getInternalRemark());
baseDao.update(null,updateWrapper);
IcNatCompareRecRelationEntity existRelationEntity=icNatCompareRecRelationDao.selectExist(data.getCustomerId(),origin.getId(),staffInfo.getAgencyId(),importDate); IcNatCompareRecRelationEntity existRelationEntity=icNatCompareRecRelationDao.selectExist(data.getCustomerId(),origin.getId(),staffInfo.getAgencyId(),importDate);
if(null!=existRelationEntity){ if(null!=existRelationEntity){
// 是否本社区(agency_id)下居民(0:否 1:是) // 是否本社区(agency_id)下居民(0:否 1:是)

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

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

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

@ -32,7 +32,8 @@
c.IC_RESI_USER_ID, c.IC_RESI_USER_ID,
r.CUSTOMER_ID, r.CUSTOMER_ID,
r.IMPORT_DATE, 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 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') left join ic_nat_compare_record c on (r.COMPARE_REC_ID=c.ID AND c.del_flag='0')
WHERE WHERE

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

@ -226,4 +226,18 @@
and (b.USER_ID is null or b.USER_ID ='') and (b.USER_ID is null or b.USER_ID ='')
</if> </if>
</update> </update>
<!-- 根据 身份证 + 疫苗接种时间 查询库里存在的 -->
<select id="getExistVaccine" resultType="com.epmet.dto.YTVaccineListDTO">
SELECT
ID_CARD,
DATE_FORMAT(INOCULATE_TIME, '%Y-%m-%d %H:%i') AS inoculateDate
FROM ic_vaccine
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})
</foreach>
)
</select>
</mapper> </mapper>

Loading…
Cancel
Save