diff --git a/src/main/java/com/docus/server/collection/webservice/ReceiveServer.java b/src/main/java/com/docus/server/collection/webservice/ReceiveServer.java index 2242ff7..8dc19ca 100644 --- a/src/main/java/com/docus/server/collection/webservice/ReceiveServer.java +++ b/src/main/java/com/docus/server/collection/webservice/ReceiveServer.java @@ -121,6 +121,14 @@ public interface ReceiveServer { */ String pushMaternalInfantRelationship(String maternalInfantRelationshipMessage); + /** + * + * 检查/检验召回推送 + * @param recallInspectionReportMessage 检查/检验召回消息 + * @return 成功或者异常信息 + */ + String pushRecallInspectionReport(String recallInspectionReportMessage); + /** * @description取消住院 */ diff --git a/src/main/java/com/docus/server/collection/webservice/impl/ReceiveServerImpl.java b/src/main/java/com/docus/server/collection/webservice/impl/ReceiveServerImpl.java index 2dde41f..a8b0900 100644 --- a/src/main/java/com/docus/server/collection/webservice/impl/ReceiveServerImpl.java +++ b/src/main/java/com/docus/server/collection/webservice/impl/ReceiveServerImpl.java @@ -107,6 +107,10 @@ public class ReceiveServerImpl implements ReceiveServer { public String pushMaternalInfantRelationship(String maternalInfantRelationshipMessage) { return reportServer.pushMaternalInfantRelationship(maternalInfantRelationshipMessage); } + @Override + public String pushRecallInspectionReport(String recallInspectionReportMessage) { + return reportServer.pushRecallInspectionReport(recallInspectionReportMessage); + } @Override public String cancelHospital(String message) { diff --git a/src/main/java/com/docus/server/report/mapper/AfCollectTaskMapper.java b/src/main/java/com/docus/server/report/mapper/AfCollectTaskMapper.java index 45cf8bf..7973a73 100644 --- a/src/main/java/com/docus/server/report/mapper/AfCollectTaskMapper.java +++ b/src/main/java/com/docus/server/report/mapper/AfCollectTaskMapper.java @@ -33,4 +33,6 @@ public interface AfCollectTaskMapper { * @return 数据库操作行 */ int updateNewSubmit(@Param("id") Long id,@Param("c2") String fileName,@Param("c1") String serialnum); + + int cancelFile(@Param("patientId")String patientId, @Param("sysFlag")String sysFlag,@Param("serialnum") String serialnum); } diff --git a/src/main/java/com/docus/server/report/service/ReportService.java b/src/main/java/com/docus/server/report/service/ReportService.java index 86ff3fe..a08bc6f 100644 --- a/src/main/java/com/docus/server/report/service/ReportService.java +++ b/src/main/java/com/docus/server/report/service/ReportService.java @@ -28,4 +28,5 @@ public interface ReportService { */ void makeupThreePartyPushReportByTaskIds(List taskIds) throws Exception; + void cancel(String patientId, String sysFlag, String serialnum); } diff --git a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java index cacf72e..18039cf 100644 --- a/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/docus/server/report/service/impl/ReportServiceImpl.java @@ -209,4 +209,9 @@ public class ReportServiceImpl implements ReportService { // 当截取长度小于集合长度,可以进行下次循环截取 } while (loop); } + + @Override + public void cancel(String patientId, String sysFlag, String serialnum) { + collectTaskMapper.cancelFile(patientId,sysFlag,serialnum); + } } diff --git a/src/main/java/com/docus/server/report/webservice/IReportServer.java b/src/main/java/com/docus/server/report/webservice/IReportServer.java index a27c28f..e228044 100644 --- a/src/main/java/com/docus/server/report/webservice/IReportServer.java +++ b/src/main/java/com/docus/server/report/webservice/IReportServer.java @@ -75,4 +75,12 @@ public interface IReportServer { * @return 成功或者异常信息 */ String pushMaternalInfantRelationship(String maternalInfantRelationshipMessage); + + /** + * + * 检查/检验召回推送 + * @param recallInspectionReportMessage 检查/检验召回消息 + * @return 成功或者异常信息 + */ + String pushRecallInspectionReport(String recallInspectionReportMessage); } diff --git a/src/main/java/com/docus/server/report/webservice/WebserviceMessageType.java b/src/main/java/com/docus/server/report/webservice/WebserviceMessageType.java index 039f53d..22275a4 100644 --- a/src/main/java/com/docus/server/report/webservice/WebserviceMessageType.java +++ b/src/main/java/com/docus/server/report/webservice/WebserviceMessageType.java @@ -9,6 +9,7 @@ public interface WebserviceMessageType { String HIP1009="HIP1009"; String HIP1010="HIP1010"; String HIP1011="HIP1011"; + String HIP1112="HIP1112"; String HIP1166="HIP1166"; String HIP1264="HIP1264"; String ICU="ICU"; diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1112RecallInspectionReportHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1112RecallInspectionReportHandler.java new file mode 100644 index 0000000..910b711 --- /dev/null +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1112RecallInspectionReportHandler.java @@ -0,0 +1,429 @@ +package com.docus.server.report.webservice.impl; + +import com.docus.core.util.DateUtil; +import com.docus.core.util.Func; +import com.docus.infrastructure.core.exception.BaseException; +import com.docus.server.collection.mapper.TBasicMapper; +import com.docus.server.report.service.ReportService; +import com.docus.server.report.util.IdUtil; +import com.docus.server.report.util.XmlUtil; +import com.docus.server.report.webservice.WebserviceMessageType; +import com.docus.server.report.webservice.WebserviceReceiveServerHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * HIP1008-检查报告新增服务处理 + * + * @author jiahsi + */ +@Service(WebserviceMessageType.HIP1112) +@Slf4j +public class HIP1112RecallInspectionReportHandler implements WebserviceReceiveServerHandler { + @Resource + private ReportService reportService; + + @Resource + private TBasicMapper tBasicMapper; + + public static void main(String[] args) { + String xml = "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + new HIP1112RecallInspectionReportHandler().handle(xml); + } + + @Override + public String handle(String receiveMessage) { + log.info("检查/检验召回推送:{}", receiveMessage); + String msgId = ""; + String sender = ""; + String receiver = ""; + try { + XmlUtil xmlUtil = XmlUtil.of(receiveMessage); + msgId = xmlUtil.getNode("/POOR_HIP1112/id/@extension").getNodeValue(); + sender = xmlUtil.getNode("/POOR_HIP1112/sender/device/id/item/@extension").getNodeValue(); + receiver = xmlUtil.getNode("/POOR_HIP1112/receiver/device/id/item/@extension").getNodeValue(); + String inpatientNo; + int admissTimes; + String patientId; + String sysFlag = sender; + + Node inpatientNoNode = xmlUtil.getNode("/POOR_HIP1112/controlActProcess/subject/placerGroup/subject/patient/id/item[@root='2.16.156.10011.1.12']/@extension"); + if (Objects.isNull(inpatientNoNode)) { + throw new BaseException("未找到住院号节点!"); + } + inpatientNo = inpatientNoNode.getNodeValue(); + if (Func.isBlank(inpatientNo)) { + throw new BaseException("住院号解析为空!"); + } + Node admissTimesNode = xmlUtil.getNode("/POOR_HIP1112/controlActProcess/subject/placerGroup/componentOf1/encounter/id/item[@root='1.2.156.10011.1.2.1.7']/@extension"); + if (Objects.isNull(admissTimesNode)) { + throw new BaseException("未找到住院次数节点!"); + } + try { + admissTimes = Integer.parseInt(admissTimesNode.getNodeValue()); + } catch (Exception ex) { + throw new BaseException("无法解析住院次数!"); + } + if (admissTimes <= 0) { + throw new BaseException("住院次数解析不正常,应该为大于0的数字!"); + } + try { + patientId = tBasicMapper.getPatientIdByInpatientNoAndAdminssTimes(inpatientNo, admissTimes); + } catch (Exception ex) { + log.error("检查/检验召回,根据住院号:" + inpatientNo + ",和住院次数:" + admissTimes + ",无法匹配正确的患者!" + ex.getMessage(), ex); + throw new BaseException("匹配患者失败!"); + } + if (Func.isBlank(patientId)) { + throw new BaseException("无法匹配患者!"); + } + + + String jy = "1"; + String jc = "2"; + String reportAttribute = xmlUtil.getNode("/POOR_HIP1112/controlActProcess/subject/placerGroup/component/reportAttribute/@extension").getNodeValue(); + Node reportFlagNode = xmlUtil.getNode("/POOR_HIP1112/controlActProcess/subject/placerGroup/component/id[@root='2.16.156.10011.1.32']/@extension"); + String reportFlag = reportFlagNode.getNodeValue(); + if (Func.isBlank(reportFlag)) { + throw new BaseException("报告单号为空!"); + } + + NodeList requestNoNodes = xmlUtil.getNodeList("/POOR_HIP1112/controlActProcess/subject/placerGroup/component/inFulfillmentOf/order/id/@extension"); + int length = requestNoNodes.getLength(); + if (length > 0) { + for (int i = 0; i < length; i++) { + Node item = requestNoNodes.item(i); + String requestNo = item.getNodeValue(); + if (jc.equals(reportAttribute)) { + String jianChaFileSerialnum = getJcFileSerialnum(reportFlag, requestNo, sender); + reportService.cancel(patientId, sysFlag, jianChaFileSerialnum); + } + if (jy.equals(reportAttribute)) { + String jianYanFileSerialnum = getJyFileSerialnum(reportFlag, requestNo); + reportService.cancel(patientId, sysFlag, jianYanFileSerialnum); + } + } + } else { + if (jc.equals(reportAttribute)) { + String jianChaFileSerialnum = getJcFileSerialnum(reportFlag, null, sender); + if (Func.isNotBlank(jianChaFileSerialnum)) { + reportService.cancel(patientId, sysFlag, jianChaFileSerialnum); + } + } + } + return success(msgId, sender, receiver); + } catch (BaseException baseException) { + log.error(baseException.getMessage(), baseException); + return failed(msgId, sender, receiver, baseException.getMessage()); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return failed(msgId, sender, receiver, "系统错误!"); + } + } + + /** + * @param reportFlag 报告单号 + * @param requestNo 电子申请单号 + * @param sender 报告系统来源 + * @return 检查报告的归档唯一id + */ + private String getJcFileSerialnum(String reportFlag, String requestNo, String sender) { + // 如果报告单号带下划线是合并报告,取报告单号下划线前的,可能有个别来源不需要 + List ignoreUnderlineSenders = Arrays.asList("lungFunction-001", "BL-001"); + boolean splitCondition = reportFlag.contains("_") && !ignoreUnderlineSenders.contains(sender); + if (splitCondition) { + String[] split = reportFlag.split("_"); + return split[0]; + } + + if (Objects.isNull(requestNo)) { + return null; + } + + return reportFlag + "@" + requestNo; + } + + /** + * @param reportFlag 报告单号 + * @param requestNo 电子申请单号 + * @return 检验报告的归档唯一id + */ + private String getJyFileSerialnum(String reportFlag, String requestNo) { + return reportFlag + "@" + requestNo; + } + + + /** + * 返回检查报告新增成功消息 + * + * @param msgId 消息id + * @param sender 发送路由 + * @param receiver 接收路由 + * @return 新增成功消息响应 + */ + public String success(String msgId, String sender, String receiver) { + String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); + return "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + } + + /** + * 返回检查报告插入失败响应消息 + * + * @param msgId 消息id + * @param sender 发送路由 + * @param receiver 接收路由 + * @return 检查报告新增失败响应消息 + */ + public String failed(String msgId, String sender, String receiver, String failedMessage) { + + String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); + return "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + } + + +} diff --git a/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java b/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java index 399f299..d24f5c3 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java +++ b/src/main/java/com/docus/server/report/webservice/impl/SdryReportServerImpl.java @@ -66,4 +66,9 @@ public class SdryReportServerImpl implements IReportServer { public String pushMaternalInfantRelationship(String maternalInfantRelationshipMessage) { return webserviceReceiveServerHandler.get(WebserviceMessageType.HIP1264).handle(maternalInfantRelationshipMessage); } + + @Override + public String pushRecallInspectionReport(String recallInspectionReportMessage) { + return webserviceReceiveServerHandler.get(WebserviceMessageType.HIP1112).handle(recallInspectionReportMessage); + } } diff --git a/src/main/resources/mapper/AfCollectTaskMapper.xml b/src/main/resources/mapper/AfCollectTaskMapper.xml index 17a0b33..14172be 100644 --- a/src/main/resources/mapper/AfCollectTaskMapper.xml +++ b/src/main/resources/mapper/AfCollectTaskMapper.xml @@ -16,6 +16,13 @@ recollect_time=now() where `id` = #{id} + + update `docus_archivefile`.`t_scan_assort` + set is_del=1 + where `patient_id` = #{patientId} + and source= #{sysFlag} + and file_column_1= #{serialnum} +