推送pdf Webservice接口

3.2.4.44
wyb 2 years ago
parent 4ff6177aa5
commit b3863354f9

@ -1,5 +1,6 @@
package com.docus.server.report.api.dto;
import com.docus.server.report.entity.AfReportRecordBuffer;
import lombok.Data;
/**
@ -64,11 +65,27 @@ public class ReportDto {
/**
* 1:url2:base643:url base644:5base64
*/
private Integer downtype=1;
private Integer downtype = 1;
/**
*
*/
private String reportSn;
public ReportDto() {
}
public ReportDto(AfReportRecordBuffer buffer) {
this.jzh = buffer.getJzh();
this.inpatientNo = buffer.getInpatientNo();
this.admisstimes = buffer.getAdmissTimes();
this.assortId = buffer.getZdAssortId();
this.serialnum = buffer.getSerialnum();
this.fileTitle = buffer.getFileName();
this.fileSource = "1";
this.filestoragetype = "1";
this.downtype = buffer.getDownType();
this.reportSn = buffer.getReportSn();
}
}

@ -42,10 +42,6 @@ public class AfReportRecordBuffer implements Serializable {
*/
private Integer downType;
/**
* 0 1
*/
private Integer state;
/**
* id
@ -103,4 +99,22 @@ public class AfReportRecordBuffer implements Serializable {
this.downType = reportDto.getDowntype();
this.reportSn=reportDto.getReportSn();
}
public void setFileInfo(ReportDto reportDto) {
this.jzh = reportDto.getJzh();
this.admissTimes = reportDto.getAdmisstimes();
this.inpatientNo = reportDto.getInpatientNo();
this.sysflag = reportDto.getSysFlag();
this.zdAssortId = reportDto.getAssortId();
this.serialnum = reportDto.getSerialnum();
this.fileName = reportDto.getFileTitle();
this.reportSn=reportDto.getReportSn();
}
public void setFileUrl(ReportDto reportDto) {
this.downUrl = reportDto.getDownUrl();
this.downType = reportDto.getDowntype();
this.reportSn=reportDto.getReportSn();
}
}

@ -1,17 +1,20 @@
package com.docus.server.report.mapper;
import com.docus.server.report.entity.AfReportRecord;
import com.docus.server.report.entity.AfReportRecordBuffer;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
*
* @author wyb
*/
public interface AfReportRecordMapper {
/**
*
*
* @param afReportRecord
* @return
*/
@ -19,23 +22,26 @@ public interface AfReportRecordMapper {
/**
*
* @param serialnum
*
* @param serialnum
* @param inpatientNo
* @param admisstimes
* @param sysFlag
* @param sysFlag
* @return
*/
AfReportRecord getRecordBySerialnumAndInpatientNoAndSysFlag(@Param("serialnum") String serialnum, @Param("inpatientNo")String inpatientNo,@Param("admisstimes") Integer admisstimes, @Param("sysFlag")String sysFlag);
AfReportRecord getRecordBySerialnumAndInpatientNoAndSysFlag(@Param("serialnum") String serialnum, @Param("inpatientNo") String inpatientNo, @Param("admisstimes") Integer admisstimes, @Param("sysFlag") String sysFlag);
/**
*
*
* @param afReportRecord
* @return
*/
int updateRecordByTaskId(@Param("reportRecord")AfReportRecord afReportRecord);
int updateRecordByTaskId(@Param("reportRecord") AfReportRecord afReportRecord);
/**
*
*
* @param taskId id
* @return
*/
@ -45,6 +51,7 @@ public interface AfReportRecordMapper {
/**
* idpatientIdid
*
* @param taskIds id
* @return patientIdid
*/
@ -52,17 +59,59 @@ public interface AfReportRecordMapper {
/**
*
* @param page
*
* @param page
* @param pageSize
* @return
*/
List<AfReportRecord> getStartStateReportRecord(@Param("page") int page,@Param("pageSize") int pageSize);
List<AfReportRecord> getStartStateReportRecord(@Param("page") int page, @Param("pageSize") int pageSize);
/**
* id
*
* @param patientId
* @param taskId id
* @param taskId id
* @return
*/
int updateReportRecordPatientId(@Param("patientId") String patientId, @Param("taskId") Long taskId);
/**
*
*
* @param reportSn
* @return
*/
AfReportRecordBuffer getReportRecordBufferInfo(@Param("reportSn") String reportSn);
/**
*
*
* @param bufferInfo
* @return
*/
int saveRecordBufferFileInfo(@Param("bufferInfo") AfReportRecordBuffer bufferInfo);
/**
*
*
* @param bufferInfo
* @return
*/
int updateReportRecordPatientId(@Param("patientId") String patientId,@Param("taskId") Long taskId);
int saveRecordBufferFileUrl(@Param("bufferInfo") AfReportRecordBuffer bufferInfo);
/**
*
*
* @param id id
* @return
*/
int cancelBlocking(@Param("id") Long id);
/**
*
*
* @param bufferInfo
* @return
*/
int updateRecordBuffer(@Param("bufferInfo") AfReportRecordBuffer bufferInfo);
}

@ -16,9 +16,16 @@ public interface ReportService {
*/
void report(ReportDto reportDto);
/**
* ,
* @param reportDto
*/
void reportBuffer(ReportDto reportDto);
/**
* id
* @param taskIds id
*/
void makeupThreePartyPushReportByTaskIds(List<Long> taskIds) throws Exception;
}

@ -6,11 +6,11 @@ import com.docus.server.collection.mapper.TBasicMapper;
import com.docus.server.report.api.dto.ReportDto;
import com.docus.server.report.entity.AfCollectTask;
import com.docus.server.report.entity.AfReportRecord;
import com.docus.server.report.entity.AfReportRecordBuffer;
import com.docus.server.report.event.TaskConsumptionReportDownEvent;
import com.docus.server.report.event.ThreePartyPushReportDownEvent;
import com.docus.server.report.mapper.AfCollectTaskMapper;
import com.docus.server.report.mapper.AfReportRecordMapper;
import com.docus.server.report.service.ReportService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
@ -19,6 +19,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
*
@ -28,7 +30,7 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@Service
public class ReportServiceImpl implements ReportService {
private static final Lock REPORT_BUFFER_LOCK = new ReentrantLock();
@Resource
private ApplicationContext applicationContext;
@Resource
@ -50,6 +52,48 @@ public class ReportServiceImpl implements ReportService {
threePartyPushReports(reportDto);
}
@Override
public void reportBuffer(ReportDto reportDto) {
// 根据地址判断推送的是文件信息还是地址
String downUrl = reportDto.getDownUrl();
boolean isSaveOrUpdateDownloadUrl = Func.isNotBlank(downUrl);
// 当前一个服务,以后有需要可以用分布式锁
REPORT_BUFFER_LOCK.lock();
try {
AfReportRecordBuffer bufferInfo = afReportRecordMapper.getReportRecordBufferInfo(reportDto.getReportSn());
if (bufferInfo == null) {
bufferInfo = new AfReportRecordBuffer(reportDto);
bufferInfo.setId(idService.getDateSeq());
// 保存文件地址或者文件信息
if (isSaveOrUpdateDownloadUrl) {
bufferInfo.setFileUrl(reportDto);
afReportRecordMapper.saveRecordBufferFileInfo(bufferInfo);
} else {
bufferInfo.setFileInfo(reportDto);
afReportRecordMapper.saveRecordBufferFileUrl(bufferInfo);
}
return;
}
String bufferDownUrl = bufferInfo.getDownUrl();
// 设置地址或者文件信息
if (isSaveOrUpdateDownloadUrl) {
bufferInfo.setFileUrl(reportDto);
} else {
bufferInfo.setFileInfo(reportDto);
}
afReportRecordMapper.updateRecordBuffer(bufferInfo);
// 文件信息和地址都有,可以上报文件
boolean canReport = (isSaveOrUpdateDownloadUrl && Func.isBlank(bufferDownUrl)) || (!isSaveOrUpdateDownloadUrl && Func.isNotBlank(bufferDownUrl));
if (canReport) {
afReportRecordMapper.cancelBlocking(bufferInfo.getId());
ReportDto dto = new ReportDto(bufferInfo);
report(dto);
}
} finally {
REPORT_BUFFER_LOCK.unlock();
}
}
private void taskConsumptionReport(ReportDto reportDto) {
applicationContext.publishEvent(new TaskConsumptionReportDownEvent(this, reportDto));
try {

@ -43,4 +43,11 @@ public interface IReportServer {
* @return
*/
String pushUpdateInspectionReport(String inspectionReportMessage);
/**
* HIP1166-pdf
* @param uploadMessage pdf
* @return
*/
String pdfUpload(String uploadMessage);
}

@ -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.server.report.api.dto.ReportDto;
import com.docus.server.report.config.SdRyReportHandledConfig;
import com.docus.server.report.config.ZdAssortConfig;
import com.docus.server.report.service.ReportService;
import com.docus.server.report.util.IdUtil;
@ -223,8 +224,17 @@ public class SdryReportServerImpl implements IReportServer {
msgId = xmlUtil.getNode("/POOR_HIP1008/id/@extension").getNodeValue();
sender = xmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension").getNodeValue();
receiver = xmlUtil.getNode("/POOR_HIP1008/receiver/device/id/item/@extension").getNodeValue();
SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig();
ReportDto reportDto = getReportDtoByInspectionInsert(xmlUtil);
String sysFlag = reportDto.getSysFlag();
if (sdRyReportHandledConfig.isNotHandled(sysFlag)) {
return insertSuccess(msgId, sender, receiver);
}
if(sdRyReportHandledConfig.isBlocking(sysFlag)){
reportDto.setDownUrl(null);
reportService.reportBuffer(reportDto);
return insertSuccess(msgId, sender, receiver);
}
verifyReportDto(reportDto);
reportService.report(reportDto);
return insertSuccess(msgId, sender, receiver);
@ -264,6 +274,123 @@ public class SdryReportServerImpl implements IReportServer {
}
@Override
public String pdfUpload(String uploadMessage) {
log.info("收到pdf上传信息{}", uploadMessage);
String msgId = "";
String sender = "";
String receiver = "";
try {
XmlUtil xmlUtil = XmlUtil.of(uploadMessage);
msgId = xmlUtil.getNode("/POOR_HIP1166/id/@extension").getNodeValue();
sender = xmlUtil.getNode("/POOR_HIP1166/sender/device/id/item/@extension").getNodeValue();
receiver = xmlUtil.getNode("/POOR_HIP1166/receiver/device/id/item/@extension").getNodeValue();
ReportDto reportDto = getReportDtoByPdfUpload(xmlUtil);
reportService.reportBuffer(reportDto);
return uploadSuccess(msgId, sender, receiver);
} catch (BaseException baseException) {
log.error(baseException.getMessage(), baseException);
return uploadFailed(msgId, sender, receiver, baseException.getMessage());
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
return uploadFailed(msgId, sender, receiver, "系统错误!");
}
}
private String uploadFailed(String msgId, String sender, String receiver, String message) {
String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI);
return "<MCCI_IN000002UV01 ITSVersion=\"XML_1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:hl7-org:v3 ../multicacheschemas/MCCI_IN000002UV01.xsd\" xmlns=\"urn:hl7-org:v3\">\n" +
"\t<id root=\"2.16.156.10011.0\" extension=\""+IdUtil.standardUUID()+"\"/>\n" +
"\t<creationTime value=\""+createTime+"\"/>\n" +
"\t<interactionId root=\"2.16.840.1.113883.1.6\" extension=\"MCCI_IN000002UV01\" displayable=\"true\"/>\n" +
"\t<processingCode code=\"P\"/>\n" +
"\t<processingModeCode/>\n" +
"\t<acceptAckCode code=\"AL\"/>\n" +
"\t<receiver typeCode=\"RCV\">\n" +
"\t\t<device classCode=\"DEV\" determinerCode=\"INSTANCE\">\n" +
"\t\t\t<id>\n" +
"\t\t\t\t<item root=\"2.16.156.10011.0.1.1\" extension=\""+receiver+"\"/>\n" +
"\t\t\t</id>\n" +
"\t\t</device>\n" +
"\t</receiver>\n" +
"\t<sender typeCode=\"SND\">\n" +
"\t\t<device classCode=\"DEV\" determinerCode=\"INSTANCE\">\n" +
"\t\t\t<id>\n" +
"\t\t\t\t<item root=\"2.16.156.10011.0.1.2\" extension=\""+sender+"\"/>\n" +
"\t\t\t</id>\n" +
"\t\t</device>\n" +
"\t</sender>\n" +
"\t<acknowledgement typeCode=\"AE\">\n" +
"\t\t<!--请求消息 ID-->\n" +
"\t\t<targetMessage>\n" +
"\t\t\t<id root=\"2.16.156.10011.0\" extension=\""+msgId+"\"/>\n" +
"\t\t</targetMessage>\n" +
"\t\t<!--查询响应消息-->\n" +
"\t\t<acknowledgementDetail typeCode=\"I\">\n" +
"\t\t\t<text>\n" +
"\t\t\t\t<description value=\""+message+"\"/>\n" +
"\t\t\t</text>\n" +
"\t\t</acknowledgementDetail>\n" +
"\t</acknowledgement>\n" +
"</MCCI_IN000002UV01>";
}
private String uploadSuccess(String msgId, String sender, String receiver) {
String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI);
return "<MCCI_IN000002UV01 ITSVersion=\"XML_1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:hl7-org:v3 ../multicacheschemas/MCCI_IN000002UV01.xsd\" xmlns=\"urn:hl7-org:v3\">\n" +
"\t<id root=\"2.16.156.10011.0\" extension=\""+IdUtil.standardUUID()+"\"/>\n" +
"\t<creationTime value=\""+createTime+"\"/>\n" +
"\t<interactionId root=\"2.16.840.1.113883.1.6\" extension=\"MCCI_IN000002UV01\" displayable=\"true\"/>\n" +
"\t<processingCode code=\"P\"/>\n" +
"\t<processingModeCode/>\n" +
"\t<acceptAckCode code=\"AL\"/>\n" +
"\t<receiver typeCode=\"RCV\">\n" +
"\t\t<device classCode=\"DEV\" determinerCode=\"INSTANCE\">\n" +
"\t\t\t<id>\n" +
"\t\t\t\t<item root=\"2.16.156.10011.0.1.1\" extension=\""+receiver+"\"/>\n" +
"\t\t\t</id>\n" +
"\t\t</device>\n" +
"\t</receiver>\n" +
"\t<sender typeCode=\"SND\">\n" +
"\t\t<device classCode=\"DEV\" determinerCode=\"INSTANCE\">\n" +
"\t\t\t<id>\n" +
"\t\t\t\t<item root=\"2.16.156.10011.0.1.2\" extension=\""+sender+"\"/>\n" +
"\t\t\t</id>\n" +
"\t\t</device>\n" +
"\t</sender>\n" +
"\t<acknowledgement typeCode=\"AA\">\n" +
"\t\t<!--请求消息 ID-->\n" +
"\t\t<targetMessage>\n" +
"\t\t\t<id root=\"2.16.156.10011.0\" extension=\""+msgId+"\"/>\n" +
"\t\t</targetMessage>\n" +
"\t\t<!--查询响应消息-->\n" +
"\t\t<acknowledgementDetail typeCode=\"I\">\n" +
"\t\t\t<text>\n" +
"\t\t\t\t<description value=\"PDF新增报告上传服务处理成功\"/>\n" +
"\t\t\t</text>\n" +
"\t\t</acknowledgementDetail>\n" +
"\t</acknowledgement>\n" +
"</MCCI_IN000002UV01>\n";
}
private ReportDto getReportDtoByPdfUpload(XmlUtil xmlUtil) {
// 检查报告单号标识
Node reportSnNode = xmlUtil.getNode("/POOR_HIP1166/controlActProcess/component/structuredBody/component[@displayName='文档描述信息']/section/entry/reportInfomation/reportSn/@extension");
String reportSn = reportSnNode.getNodeValue();
Node downUrlNode = xmlUtil.getNode("/POOR_HIP1166/controlActProcess/component/structuredBody/component[@displayName='文档描述信息']/section/entry/reportInfomation/reportPath/@extension");
String downUrl = downUrlNode.getTextContent();
ReportDto reportDto = new ReportDto();
reportDto.setReportSn(reportSn);
reportDto.setDowntype(1);
reportDto.setDownUrl(downUrl);
return reportDto;
}
/**
*
*

@ -13,6 +13,23 @@
#{reportRecord.sysflag}, #{reportRecord.zdAssortId}, now(), now(), #{reportRecord.fileName},
#{reportRecord.patientId});
</insert>
<insert id="saveRecordBufferFileInfo">
INSERT INTO `docus_archivefile`.`af_report_record_buffer`(`id`, `inpatient_no`, `jzh`, `admiss_times`,
`serialnum`, `sysflag`, `zd_assort_id`, `create_time`,
`update_time`, `file_name`, `report_sn`, `blocking`)
VALUES (#{bufferInfo.id}, #{bufferInfo.inpatientNo}, #{bufferInfo.jzh}, #{bufferInfo.admissTimes},
#{bufferInfo.serialnum}, #{bufferInfo.sysflag}, #{bufferInfo.zdAssortId}, now(), now(),
#{bufferInfo.fileName}, #{bufferInfo.reportSn}, 0);
</insert>
<insert id="saveRecordBufferFileUrl">
INSERT INTO `docus_archivefile`.`af_report_record_buffer`(`id`, `down_url`, `down_type`,
`report_sn`, `blocking`,create_time,update_time)
VALUES (#{bufferInfo.id}, #{bufferInfo.downUrl},#{bufferInfo.downType}, #{bufferInfo.reportSn}, 0,now(),now());
</insert>
<update id="updateRecordByTaskId">
update `docus_archivefile`.`af_report_record`
set `down_url`=#{reportRecord.downUrl},
@ -34,6 +51,25 @@
set `patient_id`= #{patientId}
where `task_id` = #{taskId}
</update>
<update id="cancelBlocking">
UPDATE `docus_archivefile`.`af_report_record_buffer` SET `blocking` = 1 WHERE `id` = #{id};
</update>
<update id="updateRecordBuffer">
UPDATE `docus_archivefile`.`af_report_record_buffer`
SET `inpatient_no` = #{bufferInfo.inpatientNo},
`jzh` = #{bufferInfo.jzh},
`admiss_times` = #{bufferInfo.admissTimes},
`down_url` = #{bufferInfo.downUrl},
`down_type` = #{bufferInfo.downType},
`serialnum` = #{bufferInfo.serialnum},
`sysflag` = #{bufferInfo.sysflag},
`zd_assort_id` = #{bufferInfo.zdAssortId},
`update_time` = now(),
`file_name` = #{bufferInfo.fileName},
`report_sn` = #{bufferInfo.reportSn}
WHERE
`id` = #{bufferInfo.id};
</update>
<select id="getRecordBySerialnumAndInpatientNoAndSysFlag"
resultType="com.docus.server.report.entity.AfReportRecord">
select *
@ -65,4 +101,8 @@
LIMIT ${(page-1)*pageSize}
, ${pageSize}
</select>
<select id="getReportRecordBufferInfo" resultType="com.docus.server.report.entity.AfReportRecordBuffer">
SELECT * FROM `docus_archivefile`.`af_report_record_buffer`
where report_sn = #{reportSn}
</select>
</mapper>

Loading…
Cancel
Save