梅州三院基础数据同步
parent
79464688e8
commit
1945b1fdb1
@ -1 +1,4 @@
|
|||||||
{"startDate": "2024-01-01"}
|
{ "startDate": "2024-01-01",
|
||||||
|
"startTime": "2020-01-01 00:00:00",
|
||||||
|
"cyrqStart": "2020-01-01 00:00:00"
|
||||||
|
}
|
||||||
|
@ -0,0 +1,69 @@
|
|||||||
|
package com.docus.server.archive.converter;
|
||||||
|
|
||||||
|
import com.docus.server.archive.entity.TBasic;
|
||||||
|
import com.docus.server.archive.utils.PinYinUtil;
|
||||||
|
import com.docus.server.mzsy.entity.MzsyPatientInfoView;
|
||||||
|
|
||||||
|
public class MzsyPatientInfoConverter {
|
||||||
|
public static TBasic convertPatientInfo(MzsyPatientInfoView view) {
|
||||||
|
if (view == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
TBasic tBasic = new TBasic();
|
||||||
|
tBasic.setJzh(view.getJZH());
|
||||||
|
tBasic.setInpatientNo(view.getZYH());
|
||||||
|
tBasic.setAdmissTimes(view.getZYCS());
|
||||||
|
tBasic.setName(view.getXM());
|
||||||
|
tBasic.setNameSpell(getPinyinFirstSpell(view.getXM()));
|
||||||
|
tBasic.setSex(getSexCodeBySex(view.getXB()));
|
||||||
|
tBasic.setSexName(getSexNameBySex(view.getXB()));
|
||||||
|
tBasic.setAdmissDate(view.getRYRQ());
|
||||||
|
tBasic.setAdmissDept(view.getRYBQ());
|
||||||
|
tBasic.setAdmissDeptName(view.getRYKS());
|
||||||
|
tBasic.setBedNo(view.getCWDM());
|
||||||
|
tBasic.setAttending(view.getDQYS());
|
||||||
|
tBasic.setAge(view.getNL());
|
||||||
|
tBasic.setAgeMonth(0);
|
||||||
|
tBasic.setAgeDay(0);
|
||||||
|
tBasic.setIdCard(view.getSFZH());
|
||||||
|
tBasic.setTelphone(view.getLXDH());
|
||||||
|
tBasic.setDisDate(view.getCYRQ());
|
||||||
|
tBasic.setDisDept(view.getCYBQ());
|
||||||
|
tBasic.setDisDeptName(view.getCYKS());
|
||||||
|
tBasic.setAdmissDays(view.getZYTS());
|
||||||
|
tBasic.setTotalCost(view.getZJINE());
|
||||||
|
tBasic.setIsDead(view.getSFSW());
|
||||||
|
tBasic.setFileSource(1);
|
||||||
|
tBasic.setLeaveMethod(view.getCYQK());
|
||||||
|
return tBasic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getPinyinFirstSpell(String str) {
|
||||||
|
try {
|
||||||
|
return PinYinUtil.getFirstSpell(str);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getSexCodeBySex(String sexName) {
|
||||||
|
if ("M".equals(sexName)) {
|
||||||
|
return "1";
|
||||||
|
}
|
||||||
|
if ("F".equals(sexName)) {
|
||||||
|
return "2";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getSexNameBySex(String sexName) {
|
||||||
|
if ("M".equals(sexName)) {
|
||||||
|
return "男";
|
||||||
|
}
|
||||||
|
if ("F".equals(sexName)) {
|
||||||
|
return "女";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,134 @@
|
|||||||
|
package com.docus.server.archive.service.impl;
|
||||||
|
|
||||||
|
import com.docus.core.util.Func;
|
||||||
|
import com.docus.core.util.ObjectUtil;
|
||||||
|
import com.docus.infrastructure.redis.service.IdService;
|
||||||
|
import com.docus.server.archive.constans.SyncConstant;
|
||||||
|
import com.docus.server.archive.converter.MzsyPatientInfoConverter;
|
||||||
|
import com.docus.server.archive.entity.TBasic;
|
||||||
|
import com.docus.server.archive.mapper.TBasicMapper;
|
||||||
|
import com.docus.server.archive.service.PatientInfoSyncService;
|
||||||
|
import com.docus.server.mzsy.entity.MzsyPatientInfoView;
|
||||||
|
import com.docus.server.mzsy.mapper.MzsyPatientInfoViewMapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
@Service("Mzsy" + SyncConstant.PATIENT_INFO_SYNC_SERVICE_SUFFIX)
|
||||||
|
@Slf4j
|
||||||
|
public class MzsyPatientInfoSyncServiceImpl implements PatientInfoSyncService {
|
||||||
|
@Resource
|
||||||
|
private TBasicMapper tBasicMapper;
|
||||||
|
@Resource
|
||||||
|
private MzsyPatientInfoViewMapper mzsyPatientInfoViewMapper;
|
||||||
|
@Resource
|
||||||
|
private IdService idService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void syncByDisDate(LocalDateTime start, LocalDateTime end) {
|
||||||
|
log.error("梅州三院未开发按照出院时间同步患者基础数据!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void syncByModifyTime(LocalDateTime start, LocalDateTime end) {
|
||||||
|
log.error("梅州三院未开发按照修改时间同步患者基础数据!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void syncByModifyTimeAndCyrq(String cyrqStart, String startTime) {
|
||||||
|
int size = 1000;
|
||||||
|
int pageNumber = 1;
|
||||||
|
while (true) {
|
||||||
|
List<MzsyPatientInfoView> patientInfoViews = mzsyPatientInfoViewMapper.pageByViwe(cyrqStart, startTime, pageNumber, size);
|
||||||
|
if (Func.isNotEmpty(patientInfoViews)) {
|
||||||
|
List<TBasic> basicList = patientInfoViews.stream()
|
||||||
|
.map(MzsyPatientInfoConverter::convertPatientInfo)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
saveOrUpdate(basicList);
|
||||||
|
}
|
||||||
|
if (Func.isEmpty(patientInfoViews) || patientInfoViews.size() < size) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pageNumber++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param iuBasicList 修改的患者基础信息
|
||||||
|
*/
|
||||||
|
private void saveOrUpdate(List<TBasic> iuBasicList) {
|
||||||
|
Date nowDate = new Date();
|
||||||
|
List<String> iuJzhList1 = iuBasicList.stream()
|
||||||
|
.map(TBasic::getJzh)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<String> iuJzhList = new ArrayList<>();
|
||||||
|
iuJzhList.addAll(iuJzhList1);
|
||||||
|
List<TBasic> existsBasicList = tBasicMapper.getByJzh(iuJzhList);
|
||||||
|
Map<String, TBasic> existsJzhBasicMap = existsBasicList.stream().collect(Collectors.toMap(TBasic::getJzh, Function.identity()));
|
||||||
|
List<TBasic> insertBasicList = new ArrayList<>();
|
||||||
|
List<TBasic> updateBasicList = new ArrayList<>();
|
||||||
|
List<TBasic> leaveMethodList = new ArrayList<>();
|
||||||
|
for (TBasic iuBasic : iuBasicList) {
|
||||||
|
if (existsJzhBasicMap.containsKey(iuBasic.getJzh())) {
|
||||||
|
TBasic tBasic = existsJzhBasicMap.get(iuBasic.getJzh());
|
||||||
|
tBasic.setName(iuBasic.getName());
|
||||||
|
tBasic.setInpatientNo(iuBasic.getInpatientNo());
|
||||||
|
tBasic.setAdmissTimes(iuBasic.getAdmissTimes());
|
||||||
|
tBasic.setSex(iuBasic.getSex());
|
||||||
|
tBasic.setSexName(iuBasic.getSexName());
|
||||||
|
tBasic.setNameSpell(iuBasic.getNameSpell());
|
||||||
|
tBasic.setJzh(iuBasic.getJzh());
|
||||||
|
tBasic.setAdmissDate(iuBasic.getAdmissDate());
|
||||||
|
tBasic.setAdmissDept(iuBasic.getAdmissDept());
|
||||||
|
tBasic.setAdmissDeptName(iuBasic.getAdmissDeptName());
|
||||||
|
tBasic.setBedNo(iuBasic.getBedNo());
|
||||||
|
tBasic.setAttending(iuBasic.getAttending());
|
||||||
|
tBasic.setAttendingName(iuBasic.getAttendingName());
|
||||||
|
tBasic.setAge(iuBasic.getAge());
|
||||||
|
tBasic.setAgeMonth(iuBasic.getAgeMonth());
|
||||||
|
tBasic.setAgeDay(iuBasic.getAgeDay());
|
||||||
|
tBasic.setIdCard(iuBasic.getIdCard());
|
||||||
|
tBasic.setTelphone(iuBasic.getTelphone());
|
||||||
|
tBasic.setDisDate(iuBasic.getDisDate());
|
||||||
|
tBasic.setDisDept(iuBasic.getDisDept());
|
||||||
|
tBasic.setDisDeptName(iuBasic.getDisDeptName());
|
||||||
|
tBasic.setIsDead(iuBasic.getIsDead());
|
||||||
|
tBasic.setTotalCost(iuBasic.getTotalCost());
|
||||||
|
tBasic.setFileSource(iuBasic.getFileSource());
|
||||||
|
tBasic.setUpdateTime(nowDate);
|
||||||
|
updateBasicList.add(tBasic);
|
||||||
|
if(ObjectUtil.isNotEmpty(iuBasic.getLeaveMethod())){
|
||||||
|
tBasic.setLeaveMethod(iuBasic.getLeaveMethod());
|
||||||
|
leaveMethodList.add(tBasic);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
iuBasic.setPatientId(String.valueOf(idService.getDateSeq()));
|
||||||
|
iuBasic.setCreateTime(nowDate);
|
||||||
|
iuBasic.setUpdateTime(nowDate);
|
||||||
|
if(ObjectUtil.isNotEmpty(iuBasic.getLeaveMethod())){
|
||||||
|
leaveMethodList.add(iuBasic);
|
||||||
|
}
|
||||||
|
insertBasicList.add(iuBasic);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Func.isNotEmpty(insertBasicList)) {
|
||||||
|
tBasicMapper.insertBatch(insertBasicList);
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(updateBasicList)) {
|
||||||
|
tBasicMapper.updateBatch(updateBasicList);
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(leaveMethodList)) {
|
||||||
|
tBasicMapper.updateExtend(leaveMethodList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.docus.server.mzsy.entity;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ApiModel("梅州三院患者信息视图")
|
||||||
|
@Data
|
||||||
|
public class MzsyPatientInfoView {
|
||||||
|
@ApiModelProperty("id号码 唯一标识")
|
||||||
|
private String JZH;
|
||||||
|
@ApiModelProperty("住院号")
|
||||||
|
private String ZYH;
|
||||||
|
@ApiModelProperty("住院次数")
|
||||||
|
private Integer ZYCS;
|
||||||
|
@ApiModelProperty("病人姓名")
|
||||||
|
private String XM;
|
||||||
|
@ApiModelProperty("性别 M男F女")
|
||||||
|
private String XB;
|
||||||
|
@ApiModelProperty("入院时间")
|
||||||
|
private Date RYRQ;
|
||||||
|
@ApiModelProperty("入院科室id")
|
||||||
|
private String RYBQ;
|
||||||
|
@ApiModelProperty("入院科室")
|
||||||
|
private String RYKS;
|
||||||
|
@ApiModelProperty("床位号码")
|
||||||
|
private String CWDM;
|
||||||
|
@ApiModelProperty("主治医师编码")
|
||||||
|
private String DQYS;
|
||||||
|
@ApiModelProperty("年龄")
|
||||||
|
private Integer NL;
|
||||||
|
@ApiModelProperty("身份证件号码")
|
||||||
|
private String SFZH;
|
||||||
|
@ApiModelProperty("手机号")
|
||||||
|
private String LXDH;
|
||||||
|
@ApiModelProperty("出院时间")
|
||||||
|
private Date CYRQ;
|
||||||
|
@ApiModelProperty("出院科室编码")
|
||||||
|
private String CYBQ;
|
||||||
|
@ApiModelProperty("出院科室名称")
|
||||||
|
private String CYKS;
|
||||||
|
@ApiModelProperty("住院天数")
|
||||||
|
private Integer ZYTS;
|
||||||
|
@ApiModelProperty("主要诊断(出院诊断)")
|
||||||
|
private String ZYZD;
|
||||||
|
@ApiModelProperty("是否死亡 1死亡 0非死亡")
|
||||||
|
private Integer SFSW;
|
||||||
|
@ApiModelProperty("离院方式1.医嘱离院2.医嘱转院3.医嘱转社区卫生服务机构/乡镇卫生院4.非医嘱离院5.死亡6.其他")
|
||||||
|
private Integer CYQK;
|
||||||
|
@ApiModelProperty("患者本次住院总费用")
|
||||||
|
private String ZJINE;
|
||||||
|
@ApiModelProperty("删除标志(取消出院)0未删除3直接删除")
|
||||||
|
private Integer BRBZ;
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.docus.server.mzsy.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
|
import com.docus.server.mzsy.entity.MzsyPatientInfoView;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@DS("mzsy")
|
||||||
|
public interface MzsyPatientInfoViewMapper {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 患者视图数据根据上次同步时间往后查询
|
||||||
|
*/
|
||||||
|
List<MzsyPatientInfoView> pageByViwe(@Param("cyrqStart") String cyrqStart,@Param("startTime") String startTime,@Param("pageNum") Integer pageNum, @Param("pageNum") Integer pageSize);
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.docus.server.mzsy.mapper.MzsyPatientInfoViewMapper">
|
||||||
|
|
||||||
|
<select id="pageByViwe" resultType="com.docus.server.mzsy.entity.MzsyPatientInfoView">
|
||||||
|
SELECT v.*
|
||||||
|
FROM
|
||||||
|
(select ROW_NUMBER()over(order by jzh) as ROWNUMBER,* from V_JSWZH_BASE_ZL
|
||||||
|
where cyrq > #{cyrqStart}
|
||||||
|
and updated_time > #{startTime}
|
||||||
|
) AS v
|
||||||
|
WHERE v.ROWNUMBER BETWEEN ${(pageNum-1)+pageSize+1}
|
||||||
|
AND ${pageNum*pageSize}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue