package com.smartor.service.impl;
|
|
import com.ruoyi.common.core.domain.entity.SysDept;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.entity.SysUserDept;
|
import com.ruoyi.common.core.domain.entity.SysUserRole;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.smartor.domain.*;
|
import com.smartor.mapper.*;
|
import com.smartor.service.*;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.stereotype.Service;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.Period;
|
import java.time.ZoneId;
|
import java.time.temporal.ChronoUnit;
|
import java.util.*;
|
|
/**
|
* 患者档案Service业务层处理
|
*
|
* @author smartor
|
* @date 2023-03-04
|
*/
|
@Slf4j
|
@Service
|
public class ExternalInfoServiceImpl implements ExternalInfoService {
|
@Autowired
|
private ExternalInfoMapper externalInfoMapper;
|
@Autowired
|
private PatArchiveMapper patArchiveMapper;
|
@Autowired
|
private PatMedOuthospMapper patMedOuthospMapper;
|
@Autowired
|
private PatMedInhospMapper patMedInhospMapper;
|
@Autowired
|
private WuxiSysUserMapper userMapper;
|
@Autowired
|
private WuxiSysDeptMapper deptMapper;
|
@Autowired
|
private SysUserDeptMapper sudMapper;
|
@Autowired
|
private WuxiSysUserRoleMapper sysUserRoleMapper;
|
|
@Override
|
public PatArchive getExternalPatientInfo(Long brid, String zyOrmz) {
|
log.error("getExternalPatientInfo的数据入参为:{}", brid);
|
List<ExternalPatientInfo> externalPatientInfo = null;
|
if (zyOrmz.equals("zy")) {
|
//出入院患者基本信息
|
externalPatientInfo = externalInfoMapper.getExternalPatientInfo(brid.toString());
|
} else {
|
//门急诊患者基本信息
|
externalPatientInfo = externalInfoMapper.getExternalOutHospPatientInfo(null, null, brid.toString());
|
}
|
|
|
List<ExternalInHospPatientInfo> externalInHospPatientInfos = externalInfoMapper.getExternalInHospPatientInfo(null, null, brid);
|
|
log.error("externalPatientInfo的数据为:{}", externalPatientInfo.size());
|
if (externalPatientInfo.size() == 0) {
|
return null;
|
}
|
ExternalPatientInfo externalPatientInfo1 = externalPatientInfo.get(0);
|
PatArchive patArchive = new PatArchive();
|
patArchive.setPatientno(externalPatientInfo1.getJzkh());
|
patArchive.setNotrequiredFlag("0");
|
patArchive.setSourcefrom(1);
|
patArchive.setPatidHis(externalPatientInfo1.getBrid());
|
patArchive.setPattype("2");
|
patArchive.setName(externalPatientInfo1.getBrxm());
|
if (externalPatientInfo1.getBrxb().equals("男")) patArchive.setSex(1L);
|
else if (externalPatientInfo1.getBrxb().equals("女")) patArchive.setSex(2L);
|
//计算年龄
|
if (ObjectUtils.isNotEmpty(externalPatientInfo1.getCsny())) {
|
Map<String, String> map = calculateAge(externalPatientInfo1.getCsny().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now());
|
patArchive.setAge(ObjectUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null);
|
patArchive.setAgeUnit(map.get("ageUnit"));
|
patArchive.setAge2(ObjectUtils.isNotEmpty(map.get("age2")) ? Long.valueOf(map.get("age2")) : null);
|
patArchive.setAgeUnit2(map.get("ageUnit2"));
|
}
|
|
patArchive.setNation(externalPatientInfo1.getMz());
|
patArchive.setBirthplace(externalPatientInfo1.getCsd_x());
|
patArchive.setNativePlace(externalPatientInfo1.getGj());
|
patArchive.setPlaceOfResidence(externalPatientInfo1.getLxdz());
|
patArchive.setIdcardno(externalPatientInfo1.getSfzh());
|
if (CollectionUtils.isNotEmpty(externalInHospPatientInfos)) {
|
patArchive.setIdcardno(externalInHospPatientInfos.get(0).getSfzh());
|
if (StringUtils.isEmpty(externalInHospPatientInfos.get(0).getSfzh())) {
|
patArchive.setIdcardno(externalPatientInfo1.getJzkh());
|
}
|
}
|
patArchive.setBirthdate(externalPatientInfo1.getCsny());
|
patArchive.setCarePerson(externalPatientInfo1.getLxrm());
|
patArchive.setRelativetelcode(externalPatientInfo1.getLxdh());
|
patArchive.setArchiveby(externalPatientInfo1.getJdr());
|
patArchive.setTelcode(externalPatientInfo1.getJtdh());
|
return patArchive;
|
}
|
|
public Map<String, String> calculateAge(LocalDate birthdate, LocalDate today) {
|
if (birthdate == null || today.isBefore(birthdate)) {
|
return null;
|
}
|
Map<String, String> ageMap = new HashMap<>();
|
|
Period period = Period.between(birthdate, today);
|
long totalDays = ChronoUnit.DAYS.between(birthdate, today);
|
long totalMonths = ChronoUnit.MONTHS.between(birthdate, today);
|
|
int years = period.getYears();
|
int months = period.getMonths();
|
int days = period.getDays();
|
|
String ageUnit;
|
Integer age;
|
String ageUnit2 = null;
|
Integer age2 = null;
|
|
if (totalDays < 30) {
|
// 小于 1 个月,按天计算
|
ageUnit = "天";
|
age = (int) totalDays;
|
ageMap.put("age", age != null ? age.toString() : null);
|
ageMap.put("ageUnit", ageUnit);
|
ageMap.put("age2", null);
|
ageMap.put("ageUnit2", null);
|
} else if (totalMonths < 12) {
|
// 小于 一年,按月 + 天计算
|
ageUnit = "月";
|
age = (int) totalMonths;
|
ageUnit2 = "天";
|
age2 = days;
|
ageMap.put("age", age != null ? age.toString() : null);
|
ageMap.put("ageUnit", ageUnit);
|
ageMap.put("age2", age2 != null ? age2.toString() : null);
|
ageMap.put("ageUnit2", ageUnit2);
|
} else {
|
// 大于等于 一年,按年 + 月计算
|
ageUnit = "岁";
|
age = years;
|
ageUnit2 = "月";
|
age2 = months;
|
ageMap.put("age", age != null ? age.toString() : null);
|
ageMap.put("ageUnit", ageUnit);
|
ageMap.put("age2", age2 != null ? age2.toString() : null);
|
ageMap.put("ageUnit2", ageUnit2);
|
}
|
|
return ageMap;
|
}
|
|
@Override
|
public Boolean getExternalOutHospInfo() {
|
//先去门急诊表获取最大的离院时间 admitdate
|
String startTime = null;
|
String endTime = null;
|
Date date = patMedOuthospMapper.selectAdmitdateMax();
|
if (ObjectUtils.isNotEmpty(date)) {
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
startTime = formatter.format(date);
|
endTime = formatter.format(new Date());
|
}
|
log.error("门急诊获取数据的开始时间:{},结束时间:{}", startTime, endTime);
|
//获取门急诊的数据
|
List<ExternalOutHospInfo> externalOutHospInfo = externalInfoMapper.getExternalOutHospInfo(startTime, endTime);
|
log.error("门急诊获取数据的数量:{}", externalOutHospInfo.size());
|
if (CollectionUtils.isNotEmpty(externalOutHospInfo)) {
|
for (ExternalOutHospInfo externalOutHospInfo1 : externalOutHospInfo) {
|
//先对患者基本信息进行处理
|
Long patid = dealPatArchive(externalOutHospInfo1.getBrid(), "mz");
|
log.error("门急诊获取患者ID:{}", patid);
|
//新增门急诊信息
|
PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
|
patMedOuthosp.setOuthospno(externalOutHospInfo1.getJzkh());
|
patMedOuthosp.setSerialnum(externalOutHospInfo1.getJzkh());
|
patMedOuthosp.setPatid(patid);
|
PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
patMedOuthosp.setPatname(patArchive.getName());
|
patMedOuthosp.setDeptcode("" + externalOutHospInfo1.getKsdm());
|
patMedOuthosp.setDeptname(externalOutHospInfo1.getKsmc());
|
patMedOuthosp.setDiagname(externalOutHospInfo1.getZddm());
|
patMedOuthosp.setIcd10code(externalOutHospInfo1.getZdmc());
|
patMedOuthosp.setDrcode(externalOutHospInfo1.getYsdm().toString());
|
patMedOuthosp.setDrname(externalOutHospInfo1.getYsmc());
|
patMedOuthosp.setAdmitdate(externalOutHospInfo1.getJzrq());
|
patMedOuthosp.setSchemestatus(externalOutHospInfo1.getQzbz());
|
patMedOuthosp.setMainsuit(externalOutHospInfo1.getZs());
|
patMedOuthosp.setHpi(externalOutHospInfo1.getXbs());
|
patMedOuthosp.setCategory(externalOutHospInfo1.getLb());
|
patMedOuthosp.setCreateTime(new Date());
|
patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp);
|
}
|
}
|
return true;
|
}
|
|
/**
|
* 这个方法没用了
|
*
|
* @return
|
*/
|
@Override
|
public Boolean getExternalOutHospPatientInfo() {
|
return null;
|
}
|
|
/**
|
* 获取入院数据
|
*
|
* @return
|
*/
|
@Override
|
public Boolean getExternalInHospPatientInfo() {
|
String startTime = null;
|
String endTime = null;
|
Date date = patMedInhospMapper.selectStartTimeMax();
|
if (ObjectUtils.isNotEmpty(date)) {
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
startTime = formatter.format(date);
|
endTime = formatter.format(new Date());
|
}
|
log.error("入院获取数据的开始时间:{},结束时间:{}", startTime, endTime);
|
//获取入院患者信息数据
|
List<ExternalInHospPatientInfo> externalInHospPatientInfo1 = externalInfoMapper.getExternalInHospPatientInfo(startTime, endTime, null);
|
log.error("入院获取数据数量:{}", externalInHospPatientInfo1.size());
|
for (ExternalInHospPatientInfo externalInHospPatientInfo : externalInHospPatientInfo1) {
|
//先对患者基本信息进行处理
|
Long patid = dealPatArchive(externalInHospPatientInfo.getBrid(), "zy");
|
PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
//新增入院数据
|
PatMedInhosp patMedInhosp = new PatMedInhosp();
|
patMedInhosp.setInhospno(externalInHospPatientInfo.getZyhm());
|
List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList2(patMedInhosp);
|
if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) {
|
continue;
|
}
|
|
patMedInhosp.setSerialnum(externalInHospPatientInfo.getZyhm());
|
patMedInhosp.setNurseId(externalInHospPatientInfo.getZrhsbm());
|
patMedInhosp.setNurseName(externalInHospPatientInfo.getZrhs());
|
patMedInhosp.setStarttime(externalInHospPatientInfo.getRyrq());
|
patMedInhosp.setDiagname(externalInHospPatientInfo.getRyqk());
|
patMedInhosp.setDeptcode(externalInHospPatientInfo.getBrks());
|
patMedInhosp.setDeptname(externalInHospPatientInfo.getBrksmc());
|
patMedInhosp.setDrname(externalInHospPatientInfo.getZzys());
|
patMedInhosp.setDrcode(externalInHospPatientInfo.getZzysbm());
|
patMedInhosp.setHospitaldistrictcode("" + externalInHospPatientInfo.getBrbqdm());
|
patMedInhosp.setHospitaldistrictname("" + externalInHospPatientInfo.getBrbq());
|
patMedInhosp.setBedNo("" + externalInHospPatientInfo.getBrch());
|
patMedInhosp.setPatid(patid);
|
patMedInhosp.setSchemestatus(1L);
|
patMedInhosp.setInhospstate("0");
|
patMedInhosp.setPatname(patArchive.getName());
|
patMedInhosp.setTelcode(patArchive.getTelcode());
|
patMedInhosp.setPatno(patArchive.getPatientno());
|
patMedInhosp.setCreateTime(new Date());
|
patMedInhospMapper.insertPatMedInhosp(patMedInhosp);
|
}
|
|
return true;
|
}
|
|
/**
|
* 获取入院数据
|
*
|
* @return
|
*/
|
@Override
|
public Boolean getExternalInHospPatientInfoBY250325() {
|
String startTime = null;
|
String endTime = null;
|
Date date = patMedInhospMapper.selectStartTimeMax();
|
if (ObjectUtils.isNotEmpty(date)) {
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
startTime = "2025-03-25";
|
endTime = formatter.format(new Date());
|
}
|
log.error("入院获取数据的开始时间:{},结束时间:{}", startTime, endTime);
|
//获取入院患者信息数据
|
List<ExternalInHospPatientInfo> externalInHospPatientInfo1 = externalInfoMapper.getExternalInHospPatientInfo(startTime, endTime, null);
|
log.error("入院获取数据数量:{}", externalInHospPatientInfo1.size());
|
for (ExternalInHospPatientInfo externalInHospPatientInfo : externalInHospPatientInfo1) {
|
//先对患者基本信息进行处理
|
Long patid = dealPatArchive(externalInHospPatientInfo.getBrid(), "zy");
|
PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
//新增入院数据
|
PatMedInhosp patMedInhosp = new PatMedInhosp();
|
patMedInhosp.setInhospno(externalInHospPatientInfo.getZyhm());
|
List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList2(patMedInhosp);
|
if (CollectionUtils.isNotEmpty(patMedInhospList) && patMedInhospList.size() > 0) {
|
patMedInhospList.get(0).setDeptcode(externalInHospPatientInfo.getBrks());
|
patMedInhospList.get(0).setDeptname(externalInHospPatientInfo.getBrksmc());
|
patMedInhospList.get(0).setDrname(externalInHospPatientInfo.getZzys());
|
patMedInhospList.get(0).setDrcode(externalInHospPatientInfo.getZzysbm());
|
patMedInhospList.get(0).setHospitaldistrictcode("" + externalInHospPatientInfo.getBrbqdm());
|
patMedInhospList.get(0).setHospitaldistrictname("" + externalInHospPatientInfo.getBrbq());
|
patMedInhospList.get(0).setBedNo("" + externalInHospPatientInfo.getBrch());
|
patMedInhospList.get(0).setUpdateTime(new Date());
|
patMedInhospMapper.updatePatMedInhosp(patMedInhospList.get(0));
|
continue;
|
}
|
|
patMedInhosp.setSerialnum(externalInHospPatientInfo.getZyhm());
|
patMedInhosp.setNurseId(externalInHospPatientInfo.getZrhsbm());
|
patMedInhosp.setNurseName(externalInHospPatientInfo.getZrhs());
|
patMedInhosp.setStarttime(externalInHospPatientInfo.getRyrq());
|
patMedInhosp.setDiagname(externalInHospPatientInfo.getRyqk());
|
patMedInhosp.setDeptcode(externalInHospPatientInfo.getBrks());
|
patMedInhosp.setDeptname(externalInHospPatientInfo.getBrksmc());
|
patMedInhosp.setDrname(externalInHospPatientInfo.getZzys());
|
patMedInhosp.setDrcode(externalInHospPatientInfo.getZzysbm());
|
patMedInhosp.setHospitaldistrictcode("" + externalInHospPatientInfo.getBrbqdm());
|
patMedInhosp.setHospitaldistrictname("" + externalInHospPatientInfo.getBrbq());
|
patMedInhosp.setBedNo("" + externalInHospPatientInfo.getBrch());
|
patMedInhosp.setPatid(patid);
|
patMedInhosp.setSchemestatus(1L);
|
patMedInhosp.setInhospstate("0");
|
patMedInhosp.setPatname(patArchive.getName());
|
patMedInhosp.setTelcode(patArchive.getTelcode());
|
patMedInhosp.setPatno(patArchive.getPatientno());
|
patMedInhosp.setCreateTime(new Date());
|
patMedInhospMapper.insertPatMedInhosp(patMedInhosp);
|
}
|
|
return true;
|
}
|
|
@Override
|
public Boolean getExternalUserAndDeptInfo() {
|
//获取用户信息
|
String startTime = null;
|
String endTime = null;
|
Date date = null;
|
// date = userMapper.selectStartTimeMax();
|
// if (ObjectUtils.isNotEmpty(date)) {
|
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
// startTime = formatter.format(date);
|
// endTime = formatter.format(new Date());
|
// }
|
// log.error("externalUserInfoList用户的时间入参:{},{}", startTime, endTime);
|
List<ExternalUserInfo> externalUserInfoList = externalInfoMapper.getExternalUserInfo(startTime, endTime);
|
log.error("externalUserInfoList用户的数量:{}", externalUserInfoList.size());
|
if (CollectionUtils.isNotEmpty(externalUserInfoList)) {
|
for (ExternalUserInfo externalUserInfo : externalUserInfoList) {
|
log.error("externalUserInfo的数据为:{}", externalUserInfo);
|
SysUser sysUser = new SysUser();
|
sysUser.setHisUserId(externalUserInfo.getHisUserId());
|
sysUser.setGuid(externalUserInfo.getOrgCode());
|
sysUser.setDeptCode(externalUserInfo.getDeptCode());
|
sysUser.setDeptName(externalUserInfo.getDeptName());
|
sysUser.setSearchscope("1");
|
if (externalUserInfo.getDeptName().contains("病区")) sysUser.setSearchscope("2");
|
sysUser.setNickName(externalUserInfo.getUserName());
|
sysUser.setUserName(externalUserInfo.getLoginName());
|
sysUser.setPhonenumber(externalUserInfo.getTel());
|
sysUser.setTitle(externalUserInfo.getZc());
|
sysUser.setUserType(externalUserInfo.getGzlb());
|
sysUser.setSex(externalUserInfo.getSex());
|
sysUser.setIdCard(externalUserInfo.getIdCard());
|
// wxrt@0230
|
String mm = externalUserInfo.getMm();
|
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
sysUser.setPassword(passwordEncoder.encode(mm));
|
//先判断该用户是否存在
|
SysUser sysUser1 = new SysUser();
|
sysUser1.setUserName(externalUserInfo.getLoginName());
|
List<SysUser> sysUserInfo = userMapper.getSysUserInfo(sysUser1);
|
if (CollectionUtils.isNotEmpty(sysUserInfo) && sysUserInfo.size() > 0) {
|
log.error("sysUser的进入了修改");
|
sysUser.setUserId(sysUserInfo.get(0).getUserId());
|
log.error("sysUser的添加值为:{}", sysUser);
|
userMapper.updateUser(sysUser);
|
} else {
|
log.error("sysUser的进入了新增");
|
userMapper.insertUser(sysUser);
|
}
|
}
|
}
|
//部门、部门与用户关联、与角色关联的代码,先不更新
|
// String sTime = null;
|
// String eTime = null;
|
// date = deptMapper.selectStartTimeMax();
|
// if (ObjectUtils.isNotEmpty(date)) {
|
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
// sTime = formatter.format(date);
|
// eTime = formatter.format(new Date());
|
// }
|
// //新增科室
|
// List<ExternalDeptInfo> externalDeptInfoList = externalInfoMapper.getExternalDeptInfo(sTime, eTime);
|
// if (CollectionUtils.isNotEmpty(externalDeptInfoList)) {
|
// for (ExternalDeptInfo externalDeptInfo : externalDeptInfoList) {
|
// SysDept sysDept = new SysDept();
|
//
|
// if (StringUtils.isNotEmpty(externalDeptInfo.getDeptCode())) {
|
// sysDept.setDeptCode(externalDeptInfo.getDeptCode());
|
// sysDept.setDeptName(externalDeptInfo.getDeptName());
|
// sysDept.setDeptType("1");
|
// if (externalDeptInfo.getDeptName().contains("病区")) sysDept.setDeptType("2");
|
// if (StringUtils.isNotEmpty(externalDeptInfo.getSjksdm()))
|
// sysDept.setParentCode(externalDeptInfo.getSjksdm().toString());
|
// sysDept.setStatus("0");
|
// //查询一下,该科室或病区是否存在如果不存在则新增
|
// SysDept sd = new SysDept();
|
// if (StringUtils.isNotEmpty(sysDept.getDeptCode())) {
|
// sd.setDeptCode(sysDept.getDeptCode());
|
// }
|
// List<SysDept> sysDepts = deptMapper.selectDeptList(sd);
|
// if (CollectionUtils.isNotEmpty(sysDepts)) {
|
// sysDept.setDeptId(sysDepts.get(0).getDeptId());
|
// log.error("sysDept的修改数据为:{}", sysDept);
|
// deptMapper.updateDept(sysDept);
|
// } else {
|
// log.error("sysDept的新增数据为:{}", sysDept);
|
// deptMapper.insertDept(sysDept);
|
// }
|
// }
|
// if (StringUtils.isNotEmpty(externalDeptInfo.getBqdm())) {
|
// sysDept.setDeptCode(externalDeptInfo.getBqdm());
|
// sysDept.setDeptName(externalDeptInfo.getBqmc());
|
// sysDept.setDeptType("2");
|
// if (StringUtils.isNotEmpty(externalDeptInfo.getSjksdm()))
|
// sysDept.setParentCode(externalDeptInfo.getSjksdm().toString());
|
// sysDept.setStatus("0");
|
// //查询一下,该科室或病区是否存在如果不存在则新增
|
// SysDept sd = new SysDept();
|
// if (StringUtils.isNotEmpty(sysDept.getDeptCode())) {
|
// sd.setDeptCode(sysDept.getDeptCode());
|
// }
|
// List<SysDept> sysDepts = deptMapper.selectDeptList(sd);
|
// if (CollectionUtils.isNotEmpty(sysDepts)) {
|
// sysDept.setDeptId(sysDepts.get(0).getDeptId());
|
// deptMapper.updateDept(sysDept);
|
// } else {
|
// deptMapper.insertDept(sysDept);
|
// }
|
// }
|
//
|
// }
|
// }
|
|
// //新增用户与科室的关系
|
// List<SysUser> sysUserList = userMapper.getSysUserInfo(null);
|
// for (SysUser sysUser : sysUserList) {
|
// //先通过userId和deptCode查一遍是否已经关联
|
// SysUserDept sud = new SysUserDept();
|
// sud.setDeptCode(sysUser.getDeptCode());
|
// sud.setUserId(sysUser.getUserId());
|
// List<SysUserDept> sysUserDepts = sudMapper.selectSysUserDeptList(sud);
|
// if (CollectionUtils.isNotEmpty(sysUserDepts)) continue;
|
// log.error("sysUser.getDeptCode()的值为:{}", sysUser.getDeptCode());
|
// //管理员不需要
|
// if (sysUser.getDeptCode().equals("0108")) continue;
|
// SysDept sysDept = deptMapper.selectDeptByCode(sysUser.getDeptCode());
|
// SysUserDept sysUserDept = new SysUserDept();
|
// sysUserDept.setUserId(sysUser.getUserId());
|
// sysUserDept.setDeptType(sysDept.getDeptType());
|
// sysUserDept.setDeptCode(sysDept.getDeptCode());
|
// sysUserDept.setDeptName(sysDept.getDeptName());
|
// sysUserDept.setDeptId(sysDept.getDeptId());
|
// sudMapper.insertSysUserDept(sysUserDept);
|
// //新增sys_user_role
|
// if (StringUtils.isNotEmpty(sysUser.getUserType())) {
|
// SysUserRole sysUserRole = new SysUserRole();
|
// sysUserRole.setUserId(sysUser.getUserId());
|
// if (sysUser.getUserType().equals("护士")) {
|
// sysUserRole.setRoleId(4L);
|
// } else if (sysUser.getUserType().equals("医生")) {
|
// sysUserRole.setRoleId(3L);
|
// } else if (sysUser.getUserType().equals("管理")) {
|
// sysUserRole.setRoleId(2L);
|
// } else {
|
// sysUserRole.setRoleId(2L);
|
// }
|
// sysUserRoleMapper.insertUserRole(sysUserRole);
|
// }
|
// }
|
return true;
|
}
|
|
/**
|
* 获取出数院信息
|
*
|
* @return
|
*/
|
@Override
|
public Boolean getExternalLeaveHospPatientInfo() {
|
String startTime = null;
|
String endTime = null;
|
Date date = patMedInhospMapper.selectEndtimeMax();
|
if (ObjectUtils.isNotEmpty(date)) {
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
startTime = formatter.format(date);
|
endTime = formatter.format(new Date());
|
}
|
List<ExternalLeaveHospPatientInfo> externalLeaveHospPatientInfo = externalInfoMapper.getExternalLeaveHospPatientInfo(startTime, endTime);
|
for (ExternalLeaveHospPatientInfo externalLeaveHospPatientInfo1 : externalLeaveHospPatientInfo) {
|
//先对患者基本信息进行处理
|
Long patid = dealPatArchive(externalLeaveHospPatientInfo1.getBrid(), "zy");
|
//新增出院数据
|
//根据住院号查询入院信息
|
PatMedInhosp pmi = new PatMedInhosp();
|
pmi.setInhospno(externalLeaveHospPatientInfo1.getZybm());
|
List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList2(pmi);
|
log.error("通过住院号:{},查询患者入院的信息为:{}", externalLeaveHospPatientInfo1.getZybm(), patMedInhospList);
|
// log.error("externalLeaveHospPatientInfo1的结果为:{}", externalLeaveHospPatientInfo1);
|
if (CollectionUtils.isEmpty(patMedInhospList)) {
|
//如果不存在入院信息,是不是需要获取一下入院信息,则进行新增()
|
List<ExternalInHospPatientInfo> externalInHospPatientInfo1 = externalInfoMapper.getExternalInHospPatientInfo(null, null, externalLeaveHospPatientInfo1.getBrid());
|
if (CollectionUtils.isNotEmpty(externalInHospPatientInfo1)) {
|
//先对患者基本信息进行处理
|
Long pid = dealPatArchive(externalInHospPatientInfo1.get(0).getBrid(), "zy");
|
PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
//新增入院数据
|
PatMedInhosp inhosp = new PatMedInhosp();
|
inhosp.setInhospno(externalInHospPatientInfo1.get(0).getZyhm());
|
inhosp.setSerialnum(externalInHospPatientInfo1.get(0).getZyhm());
|
inhosp.setNurseId(externalInHospPatientInfo1.get(0).getZrhsbm());
|
inhosp.setNurseName(externalInHospPatientInfo1.get(0).getZrhs());
|
inhosp.setStarttime(externalInHospPatientInfo1.get(0).getRyrq());
|
inhosp.setDiagname(externalInHospPatientInfo1.get(0).getRyqk());
|
inhosp.setDeptcode(externalLeaveHospPatientInfo1.getCyks());
|
inhosp.setDeptname(externalLeaveHospPatientInfo1.getCyksdm());
|
inhosp.setDrname(externalLeaveHospPatientInfo1.getZrys());
|
inhosp.setDrcode(externalLeaveHospPatientInfo1.getZrysbm());
|
inhosp.setHospitaldistrictid("" + externalInHospPatientInfo1.get(0).getBrbqdm());
|
inhosp.setBedNo("" + externalInHospPatientInfo1.get(0).getBrch());
|
inhosp.setPatid(pid);
|
inhosp.setPatname(patArchive.getName());
|
inhosp.setTelcode(patArchive.getTelcode());
|
inhosp.setPatno(patArchive.getPatientno());
|
inhosp.setOutWayName(externalLeaveHospPatientInfo1.getCyfs());
|
inhosp.setEndtime(externalLeaveHospPatientInfo1.getCysq());
|
inhosp.setLeavediagname(externalLeaveHospPatientInfo1.getCyzd());
|
inhosp.setLeavehospitaldistrictcode(externalLeaveHospPatientInfo1.getCybqdm());
|
inhosp.setLeavehospitaldistrictname(externalLeaveHospPatientInfo1.getCybq());
|
inhosp.setLeaveldeptcode(externalLeaveHospPatientInfo1.getCyksdm());
|
inhosp.setLeaveldeptname(externalLeaveHospPatientInfo1.getCyks());
|
|
inhosp.setSchemestatus(2L);
|
inhosp.setInhospstate("1");
|
inhosp.setCreateTime(new Date());
|
// log.error("新增的patMedInhosp为:{}", inhosp);
|
int i = patMedInhospMapper.insertPatMedInhosp(inhosp);
|
log.error("新增的patMedInhosp结果为:{}", i);
|
|
} else {
|
log.error("该病人不存在入院信息,病人ID:{}", externalLeaveHospPatientInfo1.getBrid());
|
}
|
|
} else if (CollectionUtils.isNotEmpty(patMedInhospList)) {
|
//如果存在入院信息,则进行修改
|
pmi = patMedInhospList.get(0);
|
pmi.setOutWayName(externalLeaveHospPatientInfo1.getCyfs());
|
pmi.setEndtime(externalLeaveHospPatientInfo1.getCysq());
|
pmi.setLeavediagname(externalLeaveHospPatientInfo1.getCyzd());
|
pmi.setLeaveldeptcode(externalLeaveHospPatientInfo1.getCyksdm());
|
pmi.setLeaveldeptname(externalLeaveHospPatientInfo1.getCyks());
|
pmi.setDeptname(externalLeaveHospPatientInfo1.getCyks());
|
pmi.setDeptcode(externalLeaveHospPatientInfo1.getCyksdm());
|
pmi.setLeavehospitaldistrictcode(externalLeaveHospPatientInfo1.getCybqdm());
|
pmi.setLeavehospitaldistrictname(externalLeaveHospPatientInfo1.getCybq());
|
pmi.setSchemestatus(2L);
|
pmi.setInhospstate("1");
|
pmi.setUpdateTime(new Date());
|
pmi.setNurseId(externalLeaveHospPatientInfo1.getZrhsbm());
|
pmi.setNurseName(externalLeaveHospPatientInfo1.getZrhs());
|
pmi.setDrcode(externalLeaveHospPatientInfo1.getZrysbm());
|
pmi.setDrname(externalLeaveHospPatientInfo1.getZrys());
|
|
log.error("修改的pmi结果为:{}", pmi);
|
patMedInhospMapper.updatePatMedInhosp(pmi);
|
}
|
|
}
|
return null;
|
}
|
|
|
/**
|
* 获取出数院信息从2025-03-25开始
|
*
|
* @return
|
*/
|
@Override
|
public Boolean getExternalLeaveHospPatientInfo30Day() {
|
try {
|
// 固定开始时间
|
String fixedStartTime = "2025-03-25";
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
String today = formatter.format(new Date());
|
|
log.info("开始分批查询出院患者信息,总时间范围:{} 至 {}", fixedStartTime, today);
|
|
// 计算需要查询的次数
|
Calendar startCal = Calendar.getInstance();
|
Calendar endCal = Calendar.getInstance();
|
Calendar currentCal = Calendar.getInstance();
|
|
try {
|
startCal.setTime(formatter.parse(fixedStartTime));
|
endCal.setTime(formatter.parse(today));
|
} catch (ParseException e) {
|
log.error("日期解析失败:{}", e.getMessage(), e);
|
return false;
|
}
|
|
int totalDays = (int) ((endCal.getTimeInMillis() - startCal.getTimeInMillis()) / (1000 * 60 * 60 * 24));
|
int batchSize = 10; // 每批10天
|
int totalBatches = (int) Math.ceil((double) totalDays / batchSize);
|
|
log.info("总共需要查询 {} 天,分为 {} 批次,每批 {} 天", totalDays, totalBatches, batchSize);
|
|
int totalSuccessCount = 0;
|
int totalFailCount = 0;
|
|
// 分批查询
|
for (int batch = 0; batch < totalBatches; batch++) {
|
// 计算当前批次的开始和结束时间
|
Calendar batchStartCal = (Calendar) startCal.clone();
|
batchStartCal.add(Calendar.DAY_OF_MONTH, batch * batchSize);
|
|
Calendar batchEndCal = (Calendar) batchStartCal.clone();
|
batchEndCal.add(Calendar.DAY_OF_MONTH, batchSize - 1);
|
|
// 确保不超过今天
|
if (batchEndCal.after(endCal)) {
|
batchEndCal = (Calendar) endCal.clone();
|
}
|
|
String batchStartTime = formatter.format(batchStartCal.getTime());
|
String batchEndTime = formatter.format(batchEndCal.getTime());
|
|
log.info("开始查询第 {} 批次,时间范围:{} 至 {}", batch + 1, batchStartTime, batchEndTime);
|
|
try {
|
// 查询当前批次的外部出院患者信息
|
List<ExternalOutHospInfo> externalOutHospInfos = externalInfoMapper.getExternalOutHospInfo(batchStartTime, batchEndTime);
|
log.info("第 {} 批次查询到出院患者信息数量:{}", batch + 1, externalOutHospInfos.size());
|
|
int batchSuccessCount = 0;
|
int batchFailCount = 0;
|
|
// 处理当前批次的数据
|
for (ExternalOutHospInfo externalOutHospInfo : externalOutHospInfos) {
|
try {
|
// 处理患者档案
|
Long patid = dealPatArchive(externalOutHospInfo.getBrid(), "mz");
|
PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
|
// 创建门诊记录对象
|
PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
|
|
// 设置基本信息
|
patMedOuthosp.setOuthospno(externalOutHospInfo.getJzkh());
|
patMedOuthosp.setSerialnum(externalOutHospInfo.getJzkh());
|
patMedOuthosp.setPatid(patid);
|
patMedOuthosp.setPatno(patArchive.getPatientno());
|
|
// 设置患者姓名
|
if (ObjectUtils.isNotEmpty(patArchive)) {
|
patMedOuthosp.setPatname(patArchive.getName());
|
}
|
|
// 设置诊断信息
|
patMedOuthosp.setIcd10code(externalOutHospInfo.getZddm());
|
patMedOuthosp.setDiagname(externalOutHospInfo.getZdmc());
|
|
// 设置科室信息
|
patMedOuthosp.setDeptcode(String.valueOf(externalOutHospInfo.getKsdm()));
|
patMedOuthosp.setDeptname(externalOutHospInfo.getKsmc());
|
|
// 设置医生信息
|
patMedOuthosp.setDrcode(String.valueOf(externalOutHospInfo.getYsdm()));
|
patMedOuthosp.setDrname(externalOutHospInfo.getYsmc());
|
|
// 设置其他信息
|
patMedOuthosp.setHpi(externalOutHospInfo.getXbs());
|
patMedOuthosp.setMainsuit(externalOutHospInfo.getZs());
|
patMedOuthosp.setCategory(externalOutHospInfo.getLb());
|
patMedOuthosp.setAdmitdate(externalOutHospInfo.getJzrq());
|
|
// 设置时间字段
|
Date now = new Date();
|
patMedOuthosp.setUploadTime(now);
|
patMedOuthosp.setCreateTime(now);
|
patMedOuthosp.setUpdateTime(now);
|
|
// 设置默认值
|
patMedOuthosp.setDelFlag("0"); // 删除标志
|
patMedOuthosp.setIsupload(0L); // 上传标志
|
|
// 插入数据
|
int result = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp);
|
if (result > 0) {
|
batchSuccessCount++;
|
totalSuccessCount++;
|
} else {
|
batchFailCount++;
|
totalFailCount++;
|
}
|
|
} catch (Exception e) {
|
batchFailCount++;
|
totalFailCount++;
|
log.error("处理患者门诊记录时发生异常,患者ID:{},门诊号:{},异常信息:{}",
|
externalOutHospInfo.getBrid(), externalOutHospInfo.getJzkh(), e.getMessage(), e);
|
}
|
}
|
|
log.info("第 {} 批次处理完成,成功:{},失败:{}", batch + 1, batchSuccessCount, batchFailCount);
|
|
// 每批次处理完后稍作延迟,避免对数据库造成过大压力
|
if (batch < totalBatches - 1) {
|
Thread.sleep(1000); // 延迟1秒
|
}
|
|
} catch (Exception e) {
|
log.error("第 {} 批次查询处理时发生异常:{}", batch + 1, e.getMessage(), e);
|
totalFailCount++;
|
}
|
}
|
|
log.info("所有批次处理完成,总计成功:{},失败:{}", totalSuccessCount, totalFailCount);
|
return true;
|
|
} catch (Exception e) {
|
log.error("获取出院患者信息时发生异常:{}", e.getMessage(), e);
|
return false;
|
}
|
}
|
|
|
/**
|
* 患者基本信息进行处理
|
*
|
* @param brid
|
* @return
|
*/
|
@Override
|
public Long dealPatArchive(Long brid, String zyOrmz) {
|
PatArchive patArchive = new PatArchive();
|
patArchive.setPatidHis(brid);
|
List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(patArchive);
|
PatArchive patientInfo = getExternalPatientInfo(brid, zyOrmz);
|
if (ObjectUtils.isNotEmpty(patientInfo)) {
|
if (CollectionUtils.isNotEmpty(patArchives)) {
|
//如果不为空,则走更新操作
|
patientInfo.setId(patArchives.get(0).getId());
|
patientInfo.setUpdateTime(new Date());
|
patArchiveMapper.updatePatArchive(patientInfo);
|
} else {
|
patientInfo.setCreateTime(new Date());
|
patArchiveMapper.insertPatArchiveSingle(patientInfo);
|
}
|
return patientInfo.getId();
|
}
|
return null;
|
}
|
}
|