feat: 新增检查报告推送手工单,没有住院次数,使用出入院时间范围(出院+3天)或者符合条件在院的。

广东省中医_gdszy
wyb 2 years ago
parent e0c6936c1c
commit ca48bd9dd5

@ -16,14 +16,15 @@ import java.util.List;
* @author jiashi
* @since 2021-04-14
*/
public interface TBasicMapper{
public interface TBasicMapper {
/**
*
*
* @param inpatientNo
* @param admissTimes
* @return
*/
String getPatientIdByInpatientNoAndAdminssTimes(@Param("inpatientNo") String inpatientNo,@Param("adminssTimes") Integer admissTimes);
String getPatientIdByInpatientNoAndAdminssTimes(@Param("inpatientNo") String inpatientNo, @Param("adminssTimes") Integer admissTimes);
Integer selectOne(@Param("jzh") String jzh);
@ -37,23 +38,25 @@ public interface TBasicMapper{
Integer updateExtend(@Param("tBasicExtend") TBasicExtend tBasicExtend);
List<TBasic> selectBasicListByAdmissDate(@Param("admissStartDate")String admissStartDate,@Param("admissEndDate") String admissEndDate,@Param("offset") int offset,@Param("size") int size);
List<TBasic> selectBasicListByAdmissDate(@Param("admissStartDate") String admissStartDate, @Param("admissEndDate") String admissEndDate, @Param("offset") int offset, @Param("size") int size);
/**
*
* @param patientId
*
* @param patientId
* @return
*/
String getSdRyIndexByPatientId(@Param("patientId")String patientId);
String getSdRyIndexByPatientId(@Param("patientId") String patientId);
List<TBasic> selectBasicListByCreateOrUpdateTime(@Param("startDate")String queryBasicStartDate, @Param("endDate")String queryBasicEndDate, @Param("offset") int offset,@Param("size") int size);
List<TBasic> selectBasicListByCreateOrUpdateTime(@Param("startDate") String queryBasicStartDate, @Param("endDate") String queryBasicEndDate, @Param("offset") int offset, @Param("size") int size);
List<TBasic> selectBasicListByPatientIds(@Param("patientIds") List<String> patientIds);
Integer getNurseFileCount(@Param("patientId")String patientId);
Integer getNurseFileCount(@Param("patientId") String patientId);
/**
*
*
* @param patientId
* @return
*/
@ -61,14 +64,16 @@ public interface TBasicMapper{
/**
*
* @param patientId
*
* @param patientId
* @param removeCount
* @return db
*/
Integer saveNisRemoveFilesCount(@Param("patientId") String patientId,@Param("count") int removeCount);
Integer saveNisRemoveFilesCount(@Param("patientId") String patientId, @Param("count") int removeCount);
/**
*
*
* @param patientId
* @return
*/
@ -76,21 +81,24 @@ public interface TBasicMapper{
/**
*
*
* @param babyIndex
* @return
*/
MaternalInfantRelationship getMaternalInfantRelationship(@Param("babyIndex")String babyIndex);
MaternalInfantRelationship getMaternalInfantRelationship(@Param("babyIndex") String babyIndex);
/**
*
* @param sdRyIndex
*
* @param sdRyIndex
* @param admissTimes
* @return
*/
String getPatientIdBySdRyIndexAndAdmissTimes(@Param("sdRyIndex")String sdRyIndex, @Param("admissTimes") String admissTimes );
String getPatientIdBySdRyIndexAndAdmissTimes(@Param("sdRyIndex") String sdRyIndex, @Param("admissTimes") String admissTimes);
/**
*
*
* @param patientId
* @return
*/
@ -100,14 +108,16 @@ public interface TBasicMapper{
/**
*
*
* @param patientId
* @param state 0 1
* @param state 0 1
* @return
*/
int updateNursCollectState(@Param("patientId") String patientId, @Param("state") int state);
/**
*
*
* @param patientId
* @return
*/
@ -115,18 +125,30 @@ public interface TBasicMapper{
/**
*
*
* @param userName
* @return
*/
String getNameByUserName(@Param("userName")String userName);
String getNameByUserName(@Param("userName") String userName);
/**
*
* @date 2024/1/9 14:46
* @author YongBin Wen
* @param inpatientNo
* @param reportTime yyyy-MM-dd HH:mm:ss
* @return
*/
/**
*
*
* @param inpatientNo
* @param reportTime yyyy-MM-dd HH:mm:ss
* @return
* @date 2024/1/9 14:46
* @author YongBin Wen
*/
List<Integer> getAdmissTimesByInpNoAndReportTime(@Param("inpatientNo") String inpatientNo, @Param("reportTime") String reportTime);
/**
*
*
* @param inpNo
* @return java.util.List<com.docus.server.collection.entity.TBasic>
* @date 2024/1/10 8:39
* @author YongBin Wen
*/
List<TBasic> selectBasicListByInpNo(@Param("inpNo") String inpNo);
}

@ -3,6 +3,8 @@ package com.docus.server.collection.service;
import com.docus.server.collection.dto.TBasicDto;
import com.docus.server.collection.entity.TBasic;
import java.util.Date;
public interface ITBasicService {
public void setTBasic(TBasicDto dto) throws Exception;
@ -25,4 +27,15 @@ public interface ITBasicService {
* @return
*/
boolean getIsBabyBasic(String patientId);
/**
*
* @date 2024/1/10 8:33
* @author YongBin Wen
* @param inpatientNo
* @param reportDate
* @param timeRangeAddedHour
* @return java.lang.Integer
*/
Integer matchingAdmissTimesByInpNoAndReportTime(String inpatientNo, Date reportDate, long timeRangeAddedHour);
}

@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -349,12 +350,12 @@ public class TBasicServiceImpl implements ITBasicService {
// 宝宝索引查妈妈索引 和住院次数
MaternalInfantRelationship infantRelationship = tBasicMapper.getMaternalInfantRelationship(babyIndex);
if (Objects.isNull(infantRelationship) || Func.isBlank(infantRelationship.getMomId()) ) {
if (Objects.isNull(infantRelationship) || Func.isBlank(infantRelationship.getMomId())) {
return null;
}
String parentSdRyIndex=infantRelationship.getMomId();
String parentSdRyIndex = infantRelationship.getMomId();
// 通过索引和住院次数查病案主键
String parentPatientId = tBasicMapper.getPatientIdBySdRyIndexAndAdmissTimes(parentSdRyIndex,infantRelationship.getParentTimes());
String parentPatientId = tBasicMapper.getPatientIdBySdRyIndexAndAdmissTimes(parentSdRyIndex, infantRelationship.getParentTimes());
if (Func.isBlank(parentPatientId)) {
return null;
}
@ -368,6 +369,39 @@ public class TBasicServiceImpl implements ITBasicService {
return Func.isNotEmpty(tBasic) && Func.isNotBlank(tBasic.getInpatientNo()) && tBasic.getInpatientNo().toUpperCase().contains("B");
}
@Override
public Integer matchingAdmissTimesByInpNoAndReportTime(String inpatientNo, Date reportDate, long timeRangeAddedHour) {
List<TBasic> basicList = tBasicMapper.selectBasicListByInpNo(inpatientNo);
if (Func.isEmpty(basicList)) {
log.warn("住院号:{} 未查询到患者基础数据!", inpatientNo);
return null;
}
// 转换毫秒范围进行比较运算
long timeRangeAddedMillis = timeRangeAddedHour * 60 * 60 * 1000;
long reportDateTimeMillis = reportDate.getTime();
for (TBasic basic : basicList) {
Date admissDate = basic.getAdmissDate();
Date disDate = basic.getDisDate();
if (Objects.isNull(admissDate)) {
log.warn("住院号:{} 有入院时间为空的基础数据!", inpatientNo);
continue;
}
// 入院时间大于报告时间,不匹配
if (admissDate.getTime() > reportDateTimeMillis) {
continue;
}
// 报告时间大于等于入院时间,出院时间为空或者 报告时间小于等于出院时间+时间范围差,则匹配该条数据
if (Objects.isNull(disDate) || reportDateTimeMillis <= (disDate.getTime() + timeRangeAddedMillis)) {
if (Objects.isNull(basic.getAdmissTimes())) {
log.warn("住院号:{} ,报告时间:{},范围添加 {} 小时匹配患者数据patientId为{},但是住院次数为空!", inpatientNo, Func.formatDateTime(reportDate), timeRangeAddedHour, basic.getPatientId());
}
return basic.getAdmissTimes();
}
}
log.warn("住院号:{},报告时间:{},范围添加 {} 小时,未匹配到患者基础数据具体住院次数!", inpatientNo, Func.formatDateTime(reportDate), timeRangeAddedHour);
return null;
}
public void confirmAndUpdIcuRecordState(String inpatientNo, Integer admissTimes) {
threadPoolExecutor.execute(() -> {

@ -4,7 +4,7 @@ import com.docus.core.util.DateUtil;
import com.docus.core.util.Func;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.infrastructure.redis.service.RedisOps;
import com.docus.server.collection.mapper.TBasicMapper;
import com.docus.server.collection.service.ITBasicService;
import com.docus.server.report.api.ShunDePeopleService;
import com.docus.server.report.api.dto.ReportDto;
import com.docus.server.report.config.SdRyReportHandledConfig;
@ -22,7 +22,6 @@ import org.w3c.dom.Node;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* HIP1008-
@ -41,7 +40,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
@Resource
private RedisOps redisOps;
@Resource
private TBasicMapper tBasicMapper;
private ITBasicService tBasicService;
@Override
@ -93,7 +92,14 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
String inpatientNo = inpatientNoNode.getNodeValue();
Node admissTimesNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/item[@root='1.2.156.112635.1.2.1.7']/@extension");
Integer admissTimes = Integer.valueOf(admissTimesNode.getNodeValue());
Integer admissTimes;
try {
admissTimes = Integer.valueOf(admissTimesNode.getNodeValue());
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
admissTimes = null;
}
// 患者本次就诊唯一键患者id【12位】+就诊次数
Node visitSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.11']/@extension");
@ -115,6 +121,10 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
String reportName = fileTitleNode.getTextContent();
if (admissTimes == null && isManualDocuments(requestSn)) {
admissTimes = getAdmissTimes(inpatientNo, inspectionInsertXmlUtil);
}
ReportDto reportDto = new ReportDto();
reportDto.setAdmisstimes(admissTimes);
reportDto.setInpatientNo(inpatientNo);
@ -149,6 +159,21 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
return reportDto;
}
private Integer getAdmissTimes(String inpatientNo, XmlUtil inspectionInsertXmlUtil) {
try {
//检查报告日期 yyyyMMddHHmmss
String pattern = "yyyyMMddHHmmss";
Node reportTimeNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/author/time/@value");
String reportTime = reportTimeNode.getNodeValue();
Date reportDate = Func.parseDate(reportTime, pattern);
// 出院时间+3天匹配
int timeRangeAddedHour = 3 * 24;
return tBasicService.matchingAdmissTimesByInpNoAndReportTime(inpatientNo, reportDate, timeRangeAddedHour);
} catch (Exception ex) {
throw new BaseException("解析检查报告时间出错了!");
}
}
public ReportDto getReportDtoByInspectionInsert(XmlUtil inspectionInsertXmlUtil) {
Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension");
@ -185,23 +210,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
// 如果是手工单,住院次数可能为空,则需要根据检查报告时间与出入院区间获取住院次数
// todo 实施手工单需求确认
if (admissTimes == null && isManualDocuments(eafNo)) {
//检查报告日期 yyyyMMddHHmmss
String pattern = "yyyyMMddHHmmss";
Node reportTimeNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/author/time/@value");
String reportTime = reportTimeNode.getNodeValue();
Date reportDate = Func.parseDate(reportTime, pattern);
String formatDateTime = Func.formatDateTime(reportDate);
List<Integer> admissTimesList = tBasicMapper.getAdmissTimesByInpNoAndReportTime(inpatientNo, formatDateTime);
if (Func.isEmpty(admissTimesList)) {
log.warn("住院号:{},报告时间:{} 根据住院号与出入院日期匹配患者基础数据失败!", inpatientNo, formatDateTime);
} else if (admissTimesList.size() > 1) {
log.warn("住院号:{},报告时间:{} 根据住院号与出入院日期匹配患者基础数据失败,有多条!", inpatientNo, formatDateTime);
} else {
admissTimes = admissTimesList.get(0);
if (admissTimes == null) {
log.warn("住院号:{},报告时间:{} 根据住院号与出入院日期匹配患者基础数据,住院次数为空!", inpatientNo, formatDateTime);
}
}
getAdmissTimes(inpatientNo, inspectionInsertXmlUtil);
}

@ -4,6 +4,7 @@ import com.docus.core.util.DateUtil;
import com.docus.core.util.Func;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.infrastructure.redis.service.RedisOps;
import com.docus.server.collection.service.ITBasicService;
import com.docus.server.report.api.ShunDePeopleService;
import com.docus.server.report.api.dto.ReportDto;
import com.docus.server.report.config.SdRyReportHandledConfig;
@ -38,6 +39,8 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
private ReportJob reportJob;
@Resource
private RedisOps redisOps;
@Resource
private ITBasicService tBasicService;
@Override
@ -90,7 +93,13 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
String inpatientNo = inpatientNoNode.getNodeValue();
Node admissTimesNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/item[@root='1.2.156.112635.1.2.1.7']/@extension");
Integer admissTimes = Integer.valueOf(admissTimesNode.getNodeValue());
Integer admissTimes;
try {
admissTimes = Integer.valueOf(admissTimesNode.getNodeValue());
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
admissTimes = null;
}
// 患者本次就诊唯一键患者id【12位】+就诊次数
Node visitSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.11']/@extension");
@ -111,6 +120,10 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
String reportName = fileTitleNode.getTextContent();
if (admissTimes == null && isManualDocuments(requestSn)) {
admissTimes = getAdmissTimes(inpatientNo, inspectionInsertXmlUtil);
}
ReportDto reportDto = new ReportDto();
reportDto.setAdmisstimes(admissTimes);
reportDto.setInpatientNo(inpatientNo);
@ -157,7 +170,14 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
String inpatientNo = inpatientNoNode.getNodeValue();
Node admissTimesNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/item[@root='1.2.156.112635.1.2.1.7']/@extension");
Integer admissTimes = Integer.valueOf(admissTimesNode.getNodeValue());
Integer admissTimes;
try {
admissTimes = Integer.valueOf(admissTimesNode.getNodeValue());
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
admissTimes = null;
}
// 检查报告单号标识
Node reportFlagNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.32']/@extension");
@ -185,6 +205,10 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
Node downUrlNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告图像']/report/entry[@displayName='检查报告图像URL地址']/observation/value");
String downUrl = downUrlNode.getTextContent();
if (admissTimes == null && isManualDocuments(eafNo)) {
admissTimes = getAdmissTimes(inpatientNo, inspectionUpdateXmlUtil);
}
ReportDto reportDto = new ReportDto();
reportDto.setReportSn(reportFlag);
@ -201,6 +225,32 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
return reportDto;
}
/**
*
*
* @param eafNo
* @return boolean
* @date 2024/1/9 14:38
* @author YongBin Wen
*/
private boolean isManualDocuments(String eafNo) {
return Func.isBlank(eafNo);
}
private Integer getAdmissTimes(String inpatientNo, XmlUtil inspectionInsertXmlUtil) {
try {
//检查报告日期 yyyyMMddHHmmss
String pattern = "yyyyMMddHHmmss";
Node reportTimeNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/author/time/@value");
String reportTime = reportTimeNode.getNodeValue();
Date reportDate = Func.parseDate(reportTime, pattern);
// 出院时间+3天匹配
int timeRangeAddedHour = 3 * 24;
return tBasicService.matchingAdmissTimesByInpNoAndReportTime(inpatientNo, reportDate, timeRangeAddedHour);
} catch (Exception ex) {
throw new BaseException("解析检查报告时间出错了!");
}
}
/**
*

@ -236,5 +236,12 @@
and #{reportTime} BETWEEN admiss_date and dis_date
</select>
<select id="selectBasicListByInpNo" resultType="com.docus.server.collection.entity.TBasic">
select
*
from
`docus_medicalrecord`.`t_basic`
where inpatient_no=#{inpNo}
</select>
</mapper>

Loading…
Cancel
Save