diff --git a/src/main/java/com/docus/demo/dto/SyncBasicDataDto.java b/src/main/java/com/docus/demo/dto/SyncBasicDataDto.java index 07b29c6..7e0a629 100644 --- a/src/main/java/com/docus/demo/dto/SyncBasicDataDto.java +++ b/src/main/java/com/docus/demo/dto/SyncBasicDataDto.java @@ -7,4 +7,5 @@ public class SyncBasicDataDto { + private int limit; } diff --git a/src/main/java/com/docus/demo/entity/Tbasic.java b/src/main/java/com/docus/demo/entity/Tbasic.java new file mode 100644 index 0000000..0b85e6a --- /dev/null +++ b/src/main/java/com/docus/demo/entity/Tbasic.java @@ -0,0 +1,144 @@ +package com.docus.demo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class Tbasic { + + @ApiModelProperty(value = "病案主键") + @TableId(value = "patient_id", type = IdType.ASSIGN_ID) + private String patientId; + + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + + @ApiModelProperty(value = "病案号") + private String inpatientNo; + + @ApiModelProperty(value = "住院ID号") + private String admissId; + + @ApiModelProperty(value = "患者姓名") + private String name; + + @ApiModelProperty(value = "盘号") + private String ph; + + @ApiModelProperty(value = "性别") + private String sex; + + @ApiModelProperty(value = "年龄_岁") + private Integer age; + + @ApiModelProperty(value = "年龄_月") + private Integer ageMonth; + + @ApiModelProperty(value = "年龄_天") + private Integer ageDay; + + @ApiModelProperty(value = "身份证") + private String idCard; + + @ApiModelProperty(value = "手机号码") + private String telphone; + + @ApiModelProperty(value = "住院日期") + private Date admissDate; + + @ApiModelProperty(value = "住院科室") + private String admissDept; + + @ApiModelProperty(value = "住院科室名称") + private String admissDeptName; + + @ApiModelProperty(value = "出院日期") + private Date disDate; + + @ApiModelProperty(value = "出院科室") + private String disDept; + + @ApiModelProperty(value = "出院科室名称") + private String disDeptName; + + @ApiModelProperty(value = "实际住院天数") + private Integer admissDays; + + @ApiModelProperty(value = "主管医生") + private String attending; + + @ApiModelProperty(value = "主管医生名称") + private String attendingName; + + @ApiModelProperty(value = "主要诊断编码") + private String mainDiagCode; + + @ApiModelProperty(value = "主要诊断名称") + private String mainDiagName; + + @ApiModelProperty(value = "主要手术编码") + private String mainOperateCode; + + @ApiModelProperty(value = "主要手术名称") + private String mainOperateName; + + @ApiModelProperty(value = "是否死亡") + private Integer isDead; + + @ApiModelProperty(value = "是否作废(0:否,1:是)") + private Integer isCancel; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + @ApiModelProperty(value = "是否归档 1:已归档,0:未归档") + private Integer isArchive; + + @ApiModelProperty(value = "归档时间") + private Date archiveTime; + + @ApiModelProperty(value = "文件来源 1:af_archive_detail,2:t_scan_assort") + private Integer fileSource; + + @ApiModelProperty(value = "完整性描述") + private String integrityDesc; + + private String bColumn1; + + private String bColumn2; + + private String bColumn3; + + private String bColumn4; + + private String bColumn5; + + private Integer bColumn6; + + private Integer bColumn7; + + private Integer bColumn8; + + private Integer bColumn9; + + private Integer bColumn10; + + @ApiModelProperty(value = "姓名缩写(内部构成)") + private String nameSpell; + + @ApiModelProperty(value = "性别名称") + private String sexName; + + @ApiModelProperty(value = "记账号") + private String jzh; + + @ApiModelProperty(value = "档案文件存储类型,1:pdf(默认)2:图片") + private Integer archiveFileStorageType; +} diff --git a/src/main/java/com/docus/demo/entity/sqlserver1/Tpatientvisit.java b/src/main/java/com/docus/demo/entity/sqlserver1/Tpatientvisit.java index 9413878..5752241 100644 --- a/src/main/java/com/docus/demo/entity/sqlserver1/Tpatientvisit.java +++ b/src/main/java/com/docus/demo/entity/sqlserver1/Tpatientvisit.java @@ -92,4 +92,7 @@ public class Tpatientvisit implements Serializable { @TableField("FPHZD") private String fphzd; + @ApiModelProperty(value = "是否死亡") + @TableField("fbody") + private Integer fbody; } diff --git a/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java b/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java index 6de984c..da30f50 100644 --- a/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java +++ b/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java @@ -3,6 +3,8 @@ package com.docus.demo.mapper.mysql; import com.baomidou.dynamic.datasource.annotation.DS; import com.docus.demo.dto.BasicSelectDto; +import com.docus.demo.dto.SyncBasicDataDto; +import com.docus.demo.entity.Tbasic; import com.docus.demo.vo.BasicVo; import org.apache.ibatis.annotations.Param; @@ -17,4 +19,7 @@ public interface BasicMapper { @Param("dto") BasicSelectDto basicSelectDto); + void insertOrUpdateByid(List tbasicList); + + List getOldBasicList(List fprnList, SyncBasicDataDto syncBasicDataDto); } diff --git a/src/main/java/com/docus/demo/mapper/sqlserver1/PaintVisitMapper.java b/src/main/java/com/docus/demo/mapper/sqlserver1/PaintVisitMapper.java index 5c90c02..0c6204c 100644 --- a/src/main/java/com/docus/demo/mapper/sqlserver1/PaintVisitMapper.java +++ b/src/main/java/com/docus/demo/mapper/sqlserver1/PaintVisitMapper.java @@ -1,7 +1,9 @@ package com.docus.demo.mapper.sqlserver1; -import com.baomidou.dynamic.datasource.annotation.DS; + import com.docus.demo.dto.SyncBasicDataDto; +import com.docus.demo.entity.sqlserver1.Tdiagnose; +import com.docus.demo.entity.sqlserver1.Toperation; import com.docus.demo.entity.sqlserver1.Tpatientvisit; import org.apache.ibatis.annotations.Param; @@ -11,6 +13,11 @@ import java.util.List; public interface PaintVisitMapper { - List getTpatientVisitList(@Param("dto") SyncBasicDataDto syncBasicDataDto); + List getTpatientVisitList(@Param("pageStart") int pageStart, + @Param("pageEnd") int pageEnd, + @Param("dto") SyncBasicDataDto syncBasicDataDto); + + List getToperation(@Param("fprns") List fprnList); + List getTdiagnose(@Param("fprns") List fprnList); } diff --git a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java index e92326a..5a88d08 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java @@ -1,15 +1,23 @@ 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 { @@ -20,19 +28,98 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { private PaintVisitMapper paintVisitMapper; + @Override public CommonResult syncBasicData(SyncBasicDataDto syncBasicDataDto) { - //根据出院时间查询省厅数据 - List tpatientvisitList = paintVisitMapper.getTpatientVisitList(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) { - //数据map转换 + 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 null; + return tbasic; + }).collect(Collectors.toList()); } } diff --git a/src/main/resources/mapper/mysql/BasicMapper.xml b/src/main/resources/mapper/mysql/BasicMapper.xml index 2fc0dd9..e0a7edd 100644 --- a/src/main/resources/mapper/mysql/BasicMapper.xml +++ b/src/main/resources/mapper/mysql/BasicMapper.xml @@ -3,6 +3,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/sqlserver1/PaintVisitMapper.xml b/src/main/resources/mapper/sqlserver1/PaintVisitMapper.xml index eac0b48..561c86e 100644 --- a/src/main/resources/mapper/sqlserver1/PaintVisitMapper.xml +++ b/src/main/resources/mapper/sqlserver1/PaintVisitMapper.xml @@ -6,7 +6,7 @@ + + \ No newline at end of file