feat: 处理重复基础数据

jp2demo1.0
wyb 7 months ago
parent c7fefe0ce0
commit 35c4634d4f

@ -130,4 +130,22 @@ public class SyncBasicDataController {
return CommonResult.failed("保存失败!异常处理" + e.getMessage());
}
}
@ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条")
@GetMapping("/choose")
public CommonResult<?> choose(){
log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条");
try {
syncBasicDataService.choose();
log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!");
return CommonResult.success("筛选完成!");
} catch (Exception ex) {
log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex);
return CommonResult.failed("筛选异常!");
}
}
}

@ -0,0 +1,32 @@
package com.docus.demo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author YongBin Wen
* @date 2024/9/6 16:05
*/
@Data
@ApiModel("基础数据选择处理对象")
public class BasicChooseDto {
@ApiModelProperty("病案主键")
private String patientId;
@ApiModelProperty("病案号")
private String inpatientNo;
@ApiModelProperty("患者出院日期 yyyy-MM-dd")
private String disDate;
@ApiModelProperty("患者姓名")
private String name;
@ApiModelProperty("患者姓名")
private Integer admissTimes;
@ApiModelProperty("优先级")
private int priority;
}

@ -49,6 +49,9 @@ public class ScanAssort {
@ApiModelProperty(value = "页数")
private Integer filePages;
@ApiModelProperty(value = "是否作废0未作废")
private Integer isDel;
private String creater;
private String createrName;

@ -15,4 +15,6 @@ public interface ISyncBasicDataService {
CommonResult<?> syncLzBasicData(SyncBasicDataDto syncBasicDataDto);
void scanBasicCorrect(List<BasicCorrectDto> basicCorrectDtos);
void choose();
}

@ -44,4 +44,10 @@ public interface BasicMapper {
Boolean delTbasicByAdmissId(@Param("admissId")String admissId);
int updateScanBasicCorrect(@Param("oldPatId") String oldBasicPatientId, @Param("newPatId") String newPatientId,@Param("ph") String ph);
int delTbasic(@Param("pidList") List<String> patientIds);
List<Tbasic> getTbasicByInpatientNo(@Param("inpatientNo") String inpatientNo);
List<String> getInpatientNos();
}

@ -33,5 +33,9 @@ public interface ScanAssortMapper {
int updatePatientId(@Param("oldPatId") String oldBasicPatientId, @Param("newPatId") String newPatientId);
int updatePatientIdById(@Param("ids") List<Long> ids, @Param("newPatId") String newPatientId);
int delScanAssortById(@Param("id") Long id);
List<ScanAssort> getListByPids(@Param("pidList") List<String> patientIds);
}

@ -2,11 +2,14 @@ package com.docus.demo.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.docus.demo.dto.BasicChooseDto;
import com.docus.demo.dto.BasicCorrectDto;
import com.docus.demo.dto.SyncBasicDataDto;
import com.docus.demo.entity.CommonResult;
import com.docus.demo.entity.ScanAssort;
import com.docus.demo.entity.Tbasic;
import com.docus.demo.entity.TbasicSub;
import com.docus.demo.entity.sqlserver.CardInfo;
@ -57,45 +60,45 @@ public class SyncBasicDataImpl implements ISyncBasicDataService {
//每页1000条数据
List<Tpatientvisit> tpatientvisitList;
for (int current = 1; ; current++) {
syncBasicDataDto.setStartDate(startDate +" 00:00:00");
syncBasicDataDto.setEndDate(startDate +" 23:59:59");
syncBasicDataDto.setStartDate(startDate + " 00:00:00");
syncBasicDataDto.setEndDate(startDate + " 23:59:59");
log.info(syncBasicDataDto.getStartDate()+" --- " +syncBasicDataDto.getEndDate());
log.info(syncBasicDataDto.getStartDate() + " --- " + syncBasicDataDto.getEndDate());
//根据出院时间查询省厅数据
tpatientvisitList = paintVisitMapper.getTpatientVisitList(0, 0, syncBasicDataDto);
if (tpatientvisitList.size() == 0){
if (tpatientvisitList.size() == 0) {
break;
}
log.info("开始同步"+tpatientvisitList.size());
log.info("开始同步" + tpatientvisitList.size());
// tpatientvisitList = paintVisitMapper.getTpatientVisitList((current - 1) * limit, current*limit, syncBasicDataDto);
for (Tpatientvisit e : tpatientvisitList) {
if(StrUtil.isNotBlank(e.getFprn())){
if (StrUtil.isNotBlank(e.getFprn())) {
e.setFprn(e.getFprn().toLowerCase(Locale.ROOT));
}
}
List<String> fprnList = tpatientvisitList.stream().map(Tpatientvisit::getFprn).collect(Collectors.toList());
List<Integer> ftimesList = tpatientvisitList.stream().map(Tpatientvisit::getFtimes).distinct().collect(Collectors.toList());
log.info("fprnList"+fprnList.size()+ " ftimesList" +ftimesList.size());
log.info("fprnList" + fprnList.size() + " ftimesList" + ftimesList.size());
//诊断数据
List<Tdiagnose> tdiagnoses = paintVisitMapper.getTdiagnose(fprnList,ftimesList);
log.info("tdiagnoses"+tdiagnoses.size());
List<Tdiagnose> tdiagnoses = paintVisitMapper.getTdiagnose(fprnList, ftimesList);
log.info("tdiagnoses" + tdiagnoses.size());
List<Toperation> toperations = paintVisitMapper.getToperation(fprnList);
log.info("toperations"+toperations.size());
log.info("toperations" + toperations.size());
//数据map转换
List<Tbasic> oldBasicList = basicMapper.getOldBasicList(fprnList, syncBasicDataDto);
log.info("oldBasicList"+oldBasicList.size());
log.info("oldBasicList" + oldBasicList.size());
List<Tbasic> tbasicList = this.getTbasicList(oldBasicList, tpatientvisitList, tdiagnoses, toperations);
log.info("tbasicList"+tbasicList.size());
log.info("tbasicList" + tbasicList.size());
List<TbasicSub> tbasicSubList = this.getTbasicSubList(tbasicList);
log.info("tbasicSubList"+tbasicSubList.size());
log.info("tbasicSubList" + tbasicSubList.size());
//数据入库
basicDeptService.handleDept(tbasicList);
basicMapper.insertOrUpdateByid(tbasicList);
basicMapper.insertOrUpdateTbasicSub(tbasicSubList);
log.info("数据库入库"+tbasicList.size() +"子表"+tbasicSubList.size());
log.info("数据库入库" + tbasicList.size() + "子表" + tbasicSubList.size());
if (startDate.compareTo(endDate)>0) {
if (startDate.compareTo(endDate) > 0) {
break;
}
startDate = startDate.plusDays(1);
@ -158,16 +161,284 @@ public class SyncBasicDataImpl implements ISyncBasicDataService {
}
}
@Override
public void choose() {
int count = 0;
List<String> inpatientNos = basicMapper.getInpatientNos();
log.info("本次筛选病案号数量为:{}", inpatientNos.size());
for (String inpatientNo : inpatientNos) {
choose(inpatientNo);
count++;
log.info("已经筛选病案号:{} 个", count);
}
log.info("本次筛选完成!");
}
/**
*
* / +10
* +4
* +3
* , +2 +1
*
*
*
*/
private void choose(String inpatientNo) {
List<Tbasic> basicList = basicMapper.getTbasicByInpatientNo(inpatientNo);
if (basicList.size() == 1) {
return;
}
Map<String, List<Tbasic>> group = new HashMap<>();
for (Tbasic tbasic : basicList) {
String groupKey = tbasic.getInpatientNo() + "_" + tbasic.getName() + "_" + DateUtil.formatDate(tbasic.getDisDate()) + "_" + tbasic.getAdmissTimes();
List<Tbasic> groupOrDefault = group.getOrDefault(groupKey, new ArrayList<>());
groupOrDefault.add(tbasic);
group.put(groupKey, groupOrDefault);
}
Set<Map.Entry<String, List<Tbasic>>> entries = group.entrySet();
for (Map.Entry<String, List<Tbasic>> entry : entries) {
List<Tbasic> value = entry.getValue();
if (value.size() <= 1) {
continue;
}
groupChoose(value);
}
}
/**
*
*/
private void groupChoose(List<Tbasic> basicList) {
if (basicList.size() <= 1) {
return;
}
List<BasicChooseDto> chooseDtoList = new ArrayList<>();
for (Tbasic basic : basicList) {
BasicChooseDto chooseDto = new BasicChooseDto();
chooseDto.setPatientId(basic.getPatientId());
chooseDto.setName(basic.getName());
chooseDto.setInpatientNo(basic.getInpatientNo());
chooseDto.setAdmissTimes(basic.getAdmissTimes());
chooseDto.setDisDate(DateUtil.formatDate(basic.getDisDate()));
if (StrUtil.isBlank(basic.getPh())) {
chooseDto.setPriority(0);
} else {
chooseDto.setPriority(10);
}
chooseDtoList.add(chooseDto);
}
if (judgeAndProcess(chooseDtoList)) {
return;
}
Map<String, Map<String, List<ScanAssort>>> groupByPatientGroupBySource = new HashMap<>(10);
for (BasicChooseDto basicChooseDto : chooseDtoList) {
List<ScanAssort> assorts = scanAssortMapper.getListByPid(basicChooseDto.getPatientId());
assorts = assorts.stream().filter(f -> {
if (f.getSource() == null) {
f.setSource("unknow");
}
Integer del = 1;
return ObjectUtil.notEqual(del, f.getIsDel());
}).collect(Collectors.toList());
if (CollUtil.isEmpty(assorts)) {
continue;
}
Map<String, List<ScanAssort>> groupBySource = assorts.stream().collect(Collectors.groupingBy(ScanAssort::getSource));
if (groupBySource.containsKey("-1")) {
basicChooseDto.setPriority(basicChooseDto.getPriority() + 4);
}
if (groupBySource.containsKey("lianzhong")) {
basicChooseDto.setPriority(basicChooseDto.getPriority() + 3);
}
groupByPatientGroupBySource.put(basicChooseDto.getPatientId(), groupBySource);
}
if (judgeAndProcess(chooseDtoList)) {
return;
}
int siteMaxSize = 0;
int lianzhongMaxSize = 0;
HashMap<Integer, List<BasicChooseDto>> siteFileCountMap = new HashMap<>();
HashMap<Integer, List<BasicChooseDto>> lianzhongFileCountMap = new HashMap<>();
for (BasicChooseDto chooseDto : chooseDtoList) {
Map<String, List<ScanAssort>> groupBySource = groupByPatientGroupBySource.getOrDefault(chooseDto.getPatientId(), new HashMap<>());
List<ScanAssort> siteScan = groupBySource.getOrDefault("-1", new ArrayList<>());
int siteSize = siteScan.size();
List<ScanAssort> lianzhong = groupBySource.getOrDefault("lianzhong", new ArrayList<>());
int lianzhongSize = lianzhong.size();
List<BasicChooseDto> siteGroup = siteFileCountMap.getOrDefault(siteSize, new ArrayList<>());
siteGroup.add(chooseDto);
List<BasicChooseDto> lianzhongGroup = lianzhongFileCountMap.getOrDefault(lianzhongSize, new ArrayList<>());
lianzhongGroup.add(chooseDto);
siteFileCountMap.put(siteSize, siteGroup);
lianzhongFileCountMap.put(lianzhongSize, lianzhongGroup);
siteMaxSize = Math.max(siteMaxSize, siteSize);
lianzhongMaxSize = Math.max(lianzhongMaxSize, lianzhongSize);
}
List<BasicChooseDto> siteCountChoose = siteFileCountMap.get(siteMaxSize);
List<BasicChooseDto> lianzhongCountChoose = lianzhongFileCountMap.get(lianzhongMaxSize);
for (BasicChooseDto dto : siteCountChoose) {
dto.setPriority(dto.getPriority() + 2);
}
for (BasicChooseDto dto : lianzhongCountChoose) {
dto.setPriority(dto.getPriority() + 1);
}
// 最后无需再判定,直接取最大优先权中的一条
processSelection(chooseDtoList, electedOneData(chooseDtoList));
}
/**
*
*
* @return true
*/
private boolean judgeAndProcess(List<BasicChooseDto> chooseDtoList) {
if (elected(chooseDtoList) && electedOne(chooseDtoList)) {
processSelection(chooseDtoList, electedOneData(chooseDtoList));
return true;
}
return false;
}
/**
*
*
*
*
* @param chooseDtoList
* @param finalElected
*/
private void processSelection(List<BasicChooseDto> chooseDtoList, BasicChooseDto finalElected) {
String selectPatientId = finalElected.getPatientId();
List<String> allPatientIds = chooseDtoList.stream().map(BasicChooseDto::getPatientId).collect(Collectors.toList());
List<ScanAssort> allScanAssorts = scanAssortMapper.getListByPids(allPatientIds);
allScanAssorts = allScanAssorts.stream().filter(f -> {
if (f.getSource() == null) {
f.setSource("unknow");
}
Integer del = 1;
return ObjectUtil.notEqual(del, f.getIsDel());
}).collect(Collectors.toList());
if (CollUtil.isEmpty(allScanAssorts)) {
return;
}
Set<String> allSources = allScanAssorts.stream().map(ScanAssort::getSource).collect(Collectors.toSet());
Set<String> selectPatientSources = allScanAssorts.stream()
.filter(e -> ObjectUtil.equals(selectPatientId, e.getPatientId()))
.map(ScanAssort::getSource)
.collect(Collectors.toSet());
for (String source : allSources) {
if (selectPatientSources.contains(source)) {
continue;
}
transferScanAssortBySource(allScanAssorts, selectPatientId, source);
selectPatientSources.add(source);
}
List<String> notSelectedPids = allPatientIds.stream().filter(e -> !e.equals(selectPatientId)).collect(Collectors.toList());
basicMapper.delTbasic(notSelectedPids);
for (String notSelectedPid : notSelectedPids) {
basicMapper.delTbasicSub(notSelectedPid);
}
}
/**
*
*
* @param allScanAssorts
* @param selectPatientId
* @param source
*/
private void transferScanAssortBySource(List<ScanAssort> allScanAssorts, String selectPatientId, String source) {
// 选择该来源的其他患者中这个来源数量最多的
Map<String, List<ScanAssort>> groupByPatient = allScanAssorts.stream()
.filter(e -> !ObjectUtil.equals(selectPatientId, e.getPatientId()) && ObjectUtil.equals(source, e.getSource()))
.collect(Collectors.groupingBy(ScanAssort::getPatientId));
int maxSize = 0;
String maxSizePatient = null;
Set<Map.Entry<String, List<ScanAssort>>> entries = groupByPatient.entrySet();
for (Map.Entry<String, List<ScanAssort>> entry : entries) {
List<ScanAssort> assorts = entry.getValue();
int size = assorts.size();
if (size > maxSize) {
maxSize = size;
maxSizePatient = assorts.get(0).getPatientId();
}
}
List<ScanAssort> updateScanAssort = groupByPatient.get(maxSizePatient);
List<Long> updateScanAssortIds = updateScanAssort.stream()
.map(ScanAssort::getId)
.collect(Collectors.toList());
scanAssortMapper.updatePatientIdById(updateScanAssortIds, selectPatientId);
}
/**
* ,0
*/
private boolean elected(List<BasicChooseDto> chooseDtoList) {
for (BasicChooseDto dto : chooseDtoList) {
if (dto.getPriority() > 0) {
return true;
}
}
return false;
}
/**
*
*/
private boolean electedOne(List<BasicChooseDto> chooseDtoList) {
List<BasicChooseDto> list = electedMaxPriorityData(chooseDtoList);
return list.size() == 1;
}
/**
*
*/
private BasicChooseDto electedOneData(List<BasicChooseDto> chooseDtoList) {
List<BasicChooseDto> list = electedMaxPriorityData(chooseDtoList);
return list.get(0);
}
/**
*
*/
private List<BasicChooseDto> electedMaxPriorityData(List<BasicChooseDto> chooseDtoList) {
Map<Integer, List<BasicChooseDto>> groupByPriority = chooseDtoList.stream()
.collect(Collectors.groupingBy(BasicChooseDto::getPriority));
int maxPriority = 0;
for (BasicChooseDto chooseDto : chooseDtoList) {
int priority = chooseDto.getPriority();
maxPriority = Math.max(priority, maxPriority);
}
return groupByPriority.get(maxPriority);
}
public static void main(String[] args) {
LocalDate startDate = LocalDate.parse("2024-05-06");
System.out.println(startDate);
}
private List<TbasicSub> getTbasicSubList(List<Tbasic> tbasicList) {
return tbasicList.stream().map(m->{
return tbasicList.stream().map(m -> {
TbasicSub tbasicSub = new TbasicSub();
tbasicSub.setBirthday(m.getBirthday());
tbasicSub.setPatientId(m.getPatientId());
return tbasicSub;
return tbasicSub;
}).collect(Collectors.toList());
}
@ -177,83 +448,83 @@ public class SyncBasicDataImpl implements ISyncBasicDataService {
// 根据病案号 住院次数 名称 做去重判断
return tpatientvisitList.stream().map(m -> {
Tbasic oldBasic = oldBasicList.stream()
.filter(old -> ObjectUtil.equal(m.getFprn(), old.getInpatientNo().toLowerCase(Locale.ROOT))
&& ObjectUtil.equal(m.getFtimes(), old.getAdmissTimes())
&& ObjectUtil.equal(m.getFname(), old.getName())
&& sdf.format(m.getFcydate()).equals(sdf.format(old.getDisDate()))
)
.findFirst()
.orElse(null);
String fprn = m.getFprn();
Integer ftimes = m.getFtimes();
Tdiagnose tdiagnose = tdiagnoses.stream()
.filter(f -> ObjectUtil.equal(f.getFprn(), fprn)
&& ObjectUtil.equal(f.getFtimes(), ftimes)
&& ObjectUtil.equal(f.getFzdlx(), "1")
)
.findFirst()
.orElse(null);
Toperation toperation = toperations.stream()
.filter(f -> ObjectUtil.equal(f.getFprn(), fprn)
&& ObjectUtil.equal(f.getFtimes(), ftimes)
&& ObjectUtil.equal(f.getFpx(), 1L)
)
.findFirst()
.orElse(null);
Tbasic tbasic = new Tbasic();
if (oldBasic!=null){
tbasic.setPatientId(oldBasic.getPatientId());
}else {
tbasic.setPatientId(String.valueOf(SnowflakeIdWorker.idWorker.nextId()));
}
tbasic.setAdmissTimes(m.getFtimes());
tbasic.setInpatientNo(m.getFprn());
tbasic.setName(m.getFname());
tbasic.setSex(m.getFsexbh());
tbasic.setSexName(m.getFsex());
if (m.getFage().contains("Y")){
tbasic.setAge(Integer.valueOf(m.getFage().split("Y")[1]));
}else if (m.getFage().contains("M")){
tbasic.setAgeMonth(Integer.valueOf(m.getFage().split("M")[1]));
}else if (m.getFage().contains("D")){
tbasic.setAgeDay(Integer.valueOf(m.getFage().split("D")[1]));
}
Tbasic oldBasic = oldBasicList.stream()
.filter(old -> ObjectUtil.equal(m.getFprn(), old.getInpatientNo().toLowerCase(Locale.ROOT))
&& ObjectUtil.equal(m.getFtimes(), old.getAdmissTimes())
&& ObjectUtil.equal(m.getFname(), old.getName())
&& sdf.format(m.getFcydate()).equals(sdf.format(old.getDisDate()))
)
.findFirst()
.orElse(null);
tbasic.setIdCard(m.getFidcard());
tbasic.setTelphone("");
tbasic.setAdmissDate(m.getFrydate());
tbasic.setAdmissDept(m.getFrytykh());
tbasic.setAdmissDeptName(m.getFrydept());
tbasic.setDisDate(m.getFcydate());
tbasic.setDisDept(m.getFcytykh());
tbasic.setDisDeptName(m.getFcydept());
tbasic.setAdmissDays(m.getFdays());
tbasic.setAttending(m.getFzzdoctbh());
tbasic.setAttendingName(m.getFzzdoct());
tbasic.setBirthday(m.getFbirthday());
if (tdiagnose != null) {
tbasic.setMainDiagCode(tdiagnose.getFicdm());
tbasic.setMainDiagName(tdiagnose.getFjbname());
}
if (toperation != null) {
tbasic.setMainOperateCode(toperation.getFopcode());
tbasic.setMainOperateName(toperation.getFop());
}
String fprn = m.getFprn();
Integer ftimes = m.getFtimes();
Tdiagnose tdiagnose = tdiagnoses.stream()
.filter(f -> ObjectUtil.equal(f.getFprn(), fprn)
&& ObjectUtil.equal(f.getFtimes(), ftimes)
&& ObjectUtil.equal(f.getFzdlx(), "1")
)
.findFirst()
.orElse(null);
Toperation toperation = toperations.stream()
.filter(f -> ObjectUtil.equal(f.getFprn(), fprn)
&& ObjectUtil.equal(f.getFtimes(), ftimes)
&& ObjectUtil.equal(f.getFpx(), 1L)
)
.findFirst()
.orElse(null);
Tbasic tbasic = new Tbasic();
if (oldBasic != null) {
tbasic.setPatientId(oldBasic.getPatientId());
} else {
tbasic.setPatientId(String.valueOf(SnowflakeIdWorker.idWorker.nextId()));
}
tbasic.setAdmissTimes(m.getFtimes());
tbasic.setInpatientNo(m.getFprn());
tbasic.setName(m.getFname());
tbasic.setSex(m.getFsexbh());
tbasic.setSexName(m.getFsex());
if (m.getFage().contains("Y")) {
tbasic.setAge(Integer.valueOf(m.getFage().split("Y")[1]));
} else if (m.getFage().contains("M")) {
tbasic.setAgeMonth(Integer.valueOf(m.getFage().split("M")[1]));
} else if (m.getFage().contains("D")) {
tbasic.setAgeDay(Integer.valueOf(m.getFage().split("D")[1]));
}
tbasic.setIdCard(m.getFidcard());
tbasic.setTelphone("");
tbasic.setAdmissDate(m.getFrydate());
tbasic.setAdmissDept(m.getFrytykh());
tbasic.setAdmissDeptName(m.getFrydept());
tbasic.setDisDate(m.getFcydate());
tbasic.setDisDept(m.getFcytykh());
tbasic.setDisDeptName(m.getFcydept());
tbasic.setAdmissDays(m.getFdays());
tbasic.setAttending(m.getFzzdoctbh());
tbasic.setAttendingName(m.getFzzdoct());
tbasic.setBirthday(m.getFbirthday());
if (tdiagnose != null) {
tbasic.setMainDiagCode(tdiagnose.getFicdm());
tbasic.setMainDiagName(tdiagnose.getFjbname());
}
if (toperation != null) {
tbasic.setMainOperateCode(toperation.getFopcode());
tbasic.setMainOperateName(toperation.getFop());
}
// tbasic.setIsDead(m.getFbody());
tbasic.setCreateTime(new Date());
tbasic.setSexName(m.getFsex());
tbasic.setArchiveFileStorageType(2);
tbasic.setScanUploadState(0);
tbasic.setIsArchive(1);
tbasic.setFileSource(3);
return tbasic;
}).collect(Collectors.toList());
tbasic.setCreateTime(new Date());
tbasic.setSexName(m.getFsex());
tbasic.setArchiveFileStorageType(2);
tbasic.setScanUploadState(0);
tbasic.setIsArchive(1);
tbasic.setFileSource(3);
return tbasic;
}).collect(Collectors.toList());
}
@ -261,45 +532,45 @@ public class SyncBasicDataImpl implements ISyncBasicDataService {
public CommonResult<?> syncLzBasicData(SyncBasicDataDto syncBasicDataDto) {
// executor.execute(()->{
//页码
int current;
//每页1000条数据
int limit = syncBasicDataDto.getLimit();
List<CardInfo> cardInfoList;
for (current = 1; ; current++) {
cardInfoList = tcardMapper.getCardInfo((current - 1) * limit, current * limit, syncBasicDataDto);
if (null == cardInfoList || cardInfoList.size() == 0) {
break;
//页码
int current;
//每页1000条数据
int limit = syncBasicDataDto.getLimit();
List<CardInfo> cardInfoList;
for (current = 1; ; current++) {
cardInfoList = tcardMapper.getCardInfo((current - 1) * limit, current * limit, syncBasicDataDto);
if (null == cardInfoList || cardInfoList.size() == 0) {
break;
}
log.info(syncBasicDataDto.getStartDate() + " " + syncBasicDataDto.getEndDate() + "开始同步" + cardInfoList.size());
for (CardInfo e : cardInfoList) {
if (StrUtil.isNotBlank(e.getPatNo())) {
e.setPatNo(e.getPatNo().toLowerCase(Locale.ROOT));
}
log.info(syncBasicDataDto.getStartDate() + " " + syncBasicDataDto.getEndDate() + "开始同步" + cardInfoList.size());
for (CardInfo e : cardInfoList) {
if(StrUtil.isNotBlank(e.getPatNo())){
e.setPatNo(e.getPatNo().toLowerCase(Locale.ROOT));
}
if (e.getPatNum()==null) {
e.setPatNum(0);
}
if (e.getPatNum() == null) {
e.setPatNum(0);
}
List<String> fprnList = cardInfoList.stream().map(CardInfo::getPatNo).collect(Collectors.toList());
//数据map转换
List<Tbasic> oldBasicList = basicMapper.getOldBasicList(fprnList, syncBasicDataDto);
log.info("获取到旧数据"+oldBasicList.size());
List<Tbasic> tbasicList = this.getInsertTbasic(oldBasicList, cardInfoList);
if (ObjectUtil.isNotEmpty(tbasicList)) {
//判断数据量 如果文件数据大于五百条 需要做拆分分批次插入
int batchSize = 1000;
// 拆分列表
for (int i = 0; i < tbasicList.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, tbasicList.size());
List<Tbasic> sublist = tbasicList.subList(i, endIndex);
basicDeptService.handleDept(tbasicList);
//数据入库
basicMapper.insertOrUpdateByid(sublist);
log.info("数据入库"+sublist.size());
}
}
List<String> fprnList = cardInfoList.stream().map(CardInfo::getPatNo).collect(Collectors.toList());
//数据map转换
List<Tbasic> oldBasicList = basicMapper.getOldBasicList(fprnList, syncBasicDataDto);
log.info("获取到旧数据" + oldBasicList.size());
List<Tbasic> tbasicList = this.getInsertTbasic(oldBasicList, cardInfoList);
if (ObjectUtil.isNotEmpty(tbasicList)) {
//判断数据量 如果文件数据大于五百条 需要做拆分分批次插入
int batchSize = 1000;
// 拆分列表
for (int i = 0; i < tbasicList.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, tbasicList.size());
List<Tbasic> sublist = tbasicList.subList(i, endIndex);
basicDeptService.handleDept(tbasicList);
//数据入库
basicMapper.insertOrUpdateByid(sublist);
log.info("数据入库" + sublist.size());
}
}
log.info(syncBasicDataDto.getStartDate() + " " + syncBasicDataDto.getEndDate() + "结束同步" );
}
log.info(syncBasicDataDto.getStartDate() + " " + syncBasicDataDto.getEndDate() + "结束同步");
// });
@ -307,7 +578,6 @@ public class SyncBasicDataImpl implements ISyncBasicDataService {
}
private List<Tbasic> getInsertTbasic(List<Tbasic> oldBasicList, List<CardInfo> cardInfoList) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<CardInfo> cardInfos = cardInfoList.stream().filter(f -> {

@ -80,6 +80,13 @@
<delete id="delTbasicSub">
delete from docus_medicalrecord.t_basic_sub where patient_id=#{patientId}
</delete>
<delete id="delTbasic">
delete from docus_medicalrecord.t_basic
where patient_id in
<foreach collection="pidList" item="pid" separator="," open="(" close=")">
#{pid}
</foreach>
</delete>
<select id="getBasicVoList" resultType="com.docus.demo.vo.BasicVo">
@ -189,6 +196,27 @@
from docus_medicalrecord.t_basic
where patient_id = #{patientId}
</select>
<select id="getTbasicByInpatientNo" resultType="com.docus.demo.entity.Tbasic">
SELECT
patient_id,
admiss_times,
inpatient_no,
admiss_date,
`name`,
dis_date,
ph
FROM
docus_medicalrecord.t_basic
where
inpatient_no = #{inpatientNo}
</select>
<select id="getInpatientNos" resultType="java.lang.String">
SELECT
inpatient_no
FROM
docus_medicalrecord.t_basic
group by inpatient_no
</select>
</mapper>

@ -47,6 +47,13 @@
<update id="updatePatientId">
update docus_archivefile.t_scan_assort set patient_id=#{newPatId} where patient_id=#{oldPatId}
</update>
<update id="updatePatientIdById">
update docus_archivefile.t_scan_assort set patient_id=#{newPatId}
where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</update>
<delete id="deleteByPid">
delete FROM docus_archivefile.t_scan_assort
where patient_id in
@ -74,7 +81,9 @@
file_pages,
creater,
create_time,
sort
sort,
is_del,
source
FROM docus_archivefile.t_scan_assort
WHERE patient_id = #{pid}
</select>
@ -90,7 +99,9 @@
file_pages,
creater,
create_time,
sort
sort,
is_del,
source
FROM docus_archivefile.t_scan_assort
WHERE assort_id = #{assortId} and patient_id = #{pid} and source='jy'
@ -98,5 +109,26 @@
<select id="getScanAssort" resultType="com.docus.demo.entity.ScanAssort">
SELECT * FROM docus_archivefile.t_scan_assort WHERE patient_id=#{patientId} and source=#{source}
</select>
<select id="getListByPids" resultType="com.docus.demo.entity.ScanAssort">
SELECT id,
patient_id,
assort_id,
file_title,
image_path,
scan_page,
file_source,
file_storage_type,
file_pages,
creater,
create_time,
sort,
is_del,
source
FROM docus_archivefile.t_scan_assort
where patient_id in
<foreach collection="pidList" item="pid" separator="," open="(" close=")">
#{pid}
</foreach>
</select>
</mapper>
Loading…
Cancel
Save