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