package com.docus.demo.service; import cn.hutool.core.util.ObjectUtil; import com.docus.demo.dto.SyncBasicDataDto; import com.docus.demo.entity.CommonResult; import com.docus.demo.entity.Tbasic; import com.docus.demo.entity.sqlserver.CardInfo; import com.docus.demo.entity.sqlserver1.Tdiagnose; import com.docus.demo.entity.sqlserver1.Toperation; import com.docus.demo.entity.sqlserver1.Tpatientvisit; import com.docus.demo.facade.ISyncBasicDataService; import com.docus.demo.mapper.mysql.BasicMapper; import com.docus.demo.mapper.sqlserver.TcardMapper; import com.docus.demo.mapper.sqlserver1.PaintVisitMapper; import com.docus.demo.utils.SnowflakeIdWorker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service public class SyncBasicDataImpl implements ISyncBasicDataService { @Autowired private BasicMapper basicMapper; @Autowired private PaintVisitMapper paintVisitMapper; @Autowired private TcardMapper tcardMapper; @Override public CommonResult syncBasicData(SyncBasicDataDto syncBasicDataDto) { //页码 int current; //每页1000条数据 int limit = syncBasicDataDto.getLimit(); List tpatientvisitList; for (current = 1; ; current++) { //根据出院时间查询省厅数据 tpatientvisitList = paintVisitMapper.getTpatientVisitList((current-1)*limit, limit,syncBasicDataDto); if (null == tpatientvisitList || tpatientvisitList.size() == 0) { break; } List fprnList = tpatientvisitList.stream().map(Tpatientvisit::getFprn).collect(Collectors.toList()); //诊断数据 List tdiagnoses = paintVisitMapper.getTdiagnose(fprnList); List toperations = paintVisitMapper.getToperation(fprnList); //数据map转换 List oldBasicList = basicMapper.getOldBasicList(fprnList,syncBasicDataDto); List tbasicList = this.getTbasicList(oldBasicList,tpatientvisitList,tdiagnoses,toperations); //数据入库 basicMapper.insertOrUpdateByid(tbasicList); } return CommonResult.success("同步成功"); } private List getTbasicList(List oldBasicList,List tpatientvisitList, List tdiagnoses, List toperations) { return tpatientvisitList.stream() .filter(f->{ Tbasic oldBasic = oldBasicList.stream() .filter(old->ObjectUtil.equal(f.getFprn(),old.getInpatientNo()) &&ObjectUtil.equal(f.getFtimes(),old.getAdmissTimes()) ) .findFirst() .orElse(null); return oldBasic ==null; }) .map(m->{ 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(); tbasic.setPatientId(String.valueOf(SnowflakeIdWorker.idWorker.nextId())); tbasic.setAdmissTimes(m.getFtimes()); tbasic.setInpatientNo(m.getFprn()); tbasic.setName(m.getFname()); tbasic.setSex(m.getFsex()); tbasic.setAge(0); 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()); 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); return tbasic; }).collect(Collectors.toList()); } @Override public CommonResult syncLzBasicData(SyncBasicDataDto syncBasicDataDto) { //页码 int current; //每页1000条数据 int limit = syncBasicDataDto.getLimit(); List cardInfoList; for (current = 1; ; current++) { cardInfoList = tcardMapper.getCardInfo((current-1)*limit, limit,syncBasicDataDto); if (null == cardInfoList || cardInfoList.size() == 0) { break; } List fprnList = cardInfoList.stream().map(CardInfo::getPatNo).collect(Collectors.toList()); //数据map转换 List oldBasicList = basicMapper.getOldBasicList(fprnList,syncBasicDataDto); List 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 sublist = tbasicList.subList(i, endIndex); //数据入库 basicMapper.insertOrUpdateByid(sublist); } } } return CommonResult.success("同步成功"); } private List getInsertTbasic(List oldBasicList, List cardInfoList) { return cardInfoList.stream().filter(f->{ String pno = f.getPatNo(); String name = f.getPatName(); Integer pNum = f.getPatNum(); Date date = f.getOutDate(); Tbasic tbasic = oldBasicList.stream().filter(o-> ObjectUtil.equal(o.getInpatientNo(),pno) &&ObjectUtil.equal(name,o.getName()) &&ObjectUtil.equal(pNum,o.getAdmissTimes()) &&ObjectUtil.equal(date,o.getDisDate())) .findAny() .orElse(null); return tbasic==null; }).map(m->{ //根据病案号 名称 住院次数 出院时间 去重 Tbasic tbasic = new Tbasic(); tbasic.setPatientId(String.valueOf(SnowflakeIdWorker.idWorker.nextId())); tbasic.setAdmissTimes(m.getPatNum()); tbasic.setInpatientNo(m.getPatNo()); tbasic.setAdmissId(m.getPatNo()); tbasic.setName(m.getPatName()); tbasic.setSex(m.getPatSex()); tbasic.setAge(m.getPatAge()); tbasic.setIdCard(m.getPatCiticard()); tbasic.setAdmissDate(m.getInDate()); tbasic.setAdmissDept(m.getInDeptCode()); tbasic.setAdmissDeptName(m.getInDeptName()); tbasic.setDisDate(m.getOutDate()); tbasic.setDisDept(m.getOutDeptCode()); tbasic.setDisDeptName(m.getOutDeptName()); tbasic.setMainDiagName(m.getIcdeName11()); tbasic.setMainDiagCode(m.getIcdeCode11()); tbasic.setMainOperateName(m.getOperName1()); tbasic.setMainOperateCode(m.getOperIcpm1()); return tbasic; }).collect(Collectors.toList()); } }