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) { log.error("getExternalPatientInfo的数据入参为:{}", brid); List externalPatientInfo = externalInfoMapper.getExternalPatientInfo(brid.toString()); List 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 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 calculateAge(LocalDate birthdate, LocalDate today) { if (birthdate == null || today.isBefore(birthdate)) { return null; } Map 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 = externalInfoMapper.getExternalOutHospInfo(startTime, endTime); log.error("门急诊获取数据的数量:{}", externalOutHospInfo.size()); if (CollectionUtils.isNotEmpty(externalOutHospInfo)) { for (ExternalOutHospInfo externalOutHospInfo1 : externalOutHospInfo) { //先对患者基本信息进行处理 Long patid = dealPatArchive(externalOutHospInfo1.getBrid()); 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 externalInHospPatientInfo1 = externalInfoMapper.getExternalInHospPatientInfo(startTime, endTime, null); log.error("入院获取数据数量:{}", externalInHospPatientInfo1.size()); for (ExternalInHospPatientInfo externalInHospPatientInfo : externalInHospPatientInfo1) { //先对患者基本信息进行处理 Long patid = dealPatArchive(externalInHospPatientInfo.getBrid()); PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid); //新增入院数据 PatMedInhosp patMedInhosp = new PatMedInhosp(); patMedInhosp.setInhospno(externalInHospPatientInfo.getZyhm()); List 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 externalInHospPatientInfo1 = externalInfoMapper.getExternalInHospPatientInfo(startTime, endTime, null); log.error("入院获取数据数量:{}", externalInHospPatientInfo1.size()); for (ExternalInHospPatientInfo externalInHospPatientInfo : externalInHospPatientInfo1) { //先对患者基本信息进行处理 Long patid = dealPatArchive(externalInHospPatientInfo.getBrid()); PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid); //新增入院数据 PatMedInhosp patMedInhosp = new PatMedInhosp(); patMedInhosp.setInhospno(externalInHospPatientInfo.getZyhm()); List 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 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 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 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 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 sysDepts = deptMapper.selectDeptList(sd); // if (CollectionUtils.isNotEmpty(sysDepts)) { // sysDept.setDeptId(sysDepts.get(0).getDeptId()); // deptMapper.updateDept(sysDept); // } else { // deptMapper.insertDept(sysDept); // } // } // // } // } // //新增用户与科室的关系 // List sysUserList = userMapper.getSysUserInfo(null); // for (SysUser sysUser : sysUserList) { // //先通过userId和deptCode查一遍是否已经关联 // SysUserDept sud = new SysUserDept(); // sud.setDeptCode(sysUser.getDeptCode()); // sud.setUserId(sysUser.getUserId()); // List 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 = externalInfoMapper.getExternalLeaveHospPatientInfo(startTime, endTime); for (ExternalLeaveHospPatientInfo externalLeaveHospPatientInfo1 : externalLeaveHospPatientInfo) { //先对患者基本信息进行处理 Long patid = dealPatArchive(externalLeaveHospPatientInfo1.getBrid()); //新增出院数据 //根据住院号查询入院信息 PatMedInhosp pmi = new PatMedInhosp(); pmi.setInhospno(externalLeaveHospPatientInfo1.getZybm()); List patMedInhospList = patMedInhospMapper.selectPatMedInhospList2(pmi); log.error("通过住院号:{},查询患者入院的信息为:{}", externalLeaveHospPatientInfo1.getZybm(), patMedInhospList); // log.error("externalLeaveHospPatientInfo1的结果为:{}", externalLeaveHospPatientInfo1); if (CollectionUtils.isEmpty(patMedInhospList)) { //如果不存在入院信息,是不是需要获取一下入院信息,则进行新增() List externalInHospPatientInfo1 = externalInfoMapper.getExternalInHospPatientInfo(null, null, externalLeaveHospPatientInfo1.getBrid()); if (CollectionUtils.isNotEmpty(externalInHospPatientInfo1)) { //先对患者基本信息进行处理 Long pid = dealPatArchive(externalInHospPatientInfo1.get(0).getBrid()); 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 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()); PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patid); // 创建门诊记录对象 PatMedOuthosp patMedOuthosp = new PatMedOuthosp(); // 设置基本信息 patMedOuthosp.setOuthospno(externalOutHospInfo.getJzkh()); patMedOuthosp.setSerialnum(externalOutHospInfo.getJzkh()); patMedOuthosp.setPatid(patid); // 设置患者姓名 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) { PatArchive patArchive = new PatArchive(); patArchive.setPatidHis(brid); List patArchives = patArchiveMapper.selectPatArchiveList(patArchive); PatArchive patientInfo = getExternalPatientInfo(brid); 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; } }