梅州三院基础数据同步
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