pacs 补偿job,和信息添加

pacs-补偿
wyb 2 years ago
parent 451f04c002
commit f1e4a8298a

@ -0,0 +1,58 @@
package com.docus.server.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* pacsbase64
* @author wyb
* @date 2023-10-17
*/
@Data
public class SdryPacsPrintExcept implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
/**
*
*/
private String inpatientNo;
/**
*
*/
private Integer admissTimes;
/**
* /
*/
private String jzh;
/**
*
*/
private String reportMessagePath;
/**
* 1
*/
private Integer state;
/**
*
*/
private Date createTime;
/**
* 10081009
*/
private String serviceFlag;
public SdryPacsPrintExcept() {}
}

@ -0,0 +1,20 @@
package com.docus.server.common.mapper;
import com.docus.server.common.entity.SdryPacsPrintExcept;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* pacsbase64 mapper
* @author wyb
*/
public interface SdryPacsPrintExceptMapper {
int insert(@Param("except") SdryPacsPrintExcept pacsPrintExcept);
SdryPacsPrintExcept getById(@Param("id") Long id);
int compensateSuccuss(@Param("id") Long id);
List<Long> getCompensateIds(@Param("beginDateTime") String beginDateTime);
}

@ -0,0 +1,21 @@
package com.docus.server.common.service;
import com.docus.server.common.entity.SdryPacsPrintExcept;
import java.util.List;
/**
* pacs
* @author WYBDEV
*/
public interface SdryPacsPrintExceptService {
int insert(SdryPacsPrintExcept pacsPrintExcept);
SdryPacsPrintExcept getById(Long id);
int compensateSuccuss(Long id);
List<Long> getCompensateIds(String beginDateTime);
}

@ -0,0 +1,57 @@
package com.docus.server.common.service.impl;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.server.common.entity.SdryPacsPrintExcept;
import com.docus.server.common.mapper.SdryPacsPrintExceptMapper;
import com.docus.server.common.service.SdryPacsPrintExceptService;
import com.docus.server.common.util.FileUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
*
*
* @author wyb
*/
@Service
public class SdryPacsPrintExceptServiceImpl implements SdryPacsPrintExceptService {
@Resource
private IdService idService;
@Resource
private SdryPacsPrintExceptMapper sdryPacsPrintExceptMapper;
private final static String MESSAGE_SAVE_PATH = FileUtil.currentPath() + File.separator + "pacs-print-error";
@Override
public int insert(SdryPacsPrintExcept pacsPrintExcept) {
Long id = pacsPrintExcept.getId();
id = id == null ? idService.getDateSeq() : id;
pacsPrintExcept.setId(id);
return sdryPacsPrintExceptMapper.insert(pacsPrintExcept);
}
@Override
public SdryPacsPrintExcept getById(Long id) {
return sdryPacsPrintExceptMapper.getById(id);
}
@Override
public int compensateSuccuss(Long id) {
return sdryPacsPrintExceptMapper.compensateSuccuss(id);
}
@Override
public List<Long> getCompensateIds(String beginDateTime) {
List<Long> ids= sdryPacsPrintExceptMapper.getCompensateIds(beginDateTime);
if(Objects.isNull(ids)){
return new ArrayList<>();
}
return ids;
}
}

@ -2,9 +2,7 @@ package com.docus.server.common.util;
import com.docus.core.util.Func;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.*;
/**
*
@ -67,5 +65,31 @@ public class FileUtil {
String path = currentPath() + File.separator + "remotecall" + File.separator + Func.randomUUID() + ".txt";
File file = new File(path);
saveStrData("随便写一点东西", file);
String where = readStr(file);
System.out.println(where);
}
public static String readStr(File file) {
BufferedReader bufferedReader = null;
try {
StringBuilder sb = new StringBuilder();
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception ex){
ex.printStackTrace();
return null;
}finally {
if(bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

@ -0,0 +1,160 @@
package com.docus.server.report.job;
import com.docus.core.util.Func;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.infrastructure.redis.service.RedisOps;
import com.docus.server.common.entity.SdryPacsPrintExcept;
import com.docus.server.common.service.SdryPacsPrintExceptService;
import com.docus.server.common.util.FileUtil;
import com.docus.server.report.api.dto.ReportDto;
import com.docus.server.report.service.ReportService;
import com.docus.server.report.util.XmlUtil;
import com.docus.server.report.webservice.WebserviceMessageType;
import com.docus.server.report.webservice.impl.HIP1008InspectionReportAdditionHandler;
import com.docus.server.report.webservice.impl.HIP1009InspectionReportUpdatesHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.File;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* pacsbase64xxl-Job
*
* @author jiashi
*/
@Component
@Slf4j
public class FetchPacsBase64Job {
/**
* pacspdfbase64使job
*/
public final static String FETCH_PACS_BASE64_QUEUE_HIP1008 = "docus:sdry:pacsbase64:" + WebserviceMessageType.HIP1008;
public final static String FETCH_PACS_BASE64_QUEUE_HIP1009 = "docus:sdry:pacsbase64:" + WebserviceMessageType.HIP1009;
@Resource
private ReportService reportService;
@Resource
private RedisOps redisOps;
@Resource
private HIP1008InspectionReportAdditionHandler hip1008;
@Resource
private HIP1009InspectionReportUpdatesHandler hip1009;
@Resource
private SdryPacsPrintExceptService sdryPacsPrintExceptService;
@Resource
private IdService idService;
public static void main(String[] args) {
LocalDate localDate = LocalDate.now().plusMonths(-3);
String beginDateTime = localDate.toString() + " 00:00:00";
System.out.println(beginDateTime);
}
@XxlJob("compensateFetchBase64ReportJob")
public void compensateFetchBase64ReportJob() {
LocalDate localDate = LocalDate.now().plusMonths(-3);
String beginDateTime = localDate.toString() + " 00:00:00";
List<Long> compensateIds = sdryPacsPrintExceptService.getCompensateIds(beginDateTime);
log.info("补偿失败的pacs获取base64文件数据JOB开始本次补偿 {} 条数据!", compensateIds.size());
if (Func.isNotEmpty(compensateIds)) {
for (Long id : compensateIds) {
try {
compensateFetchBase64Report(id);
} catch (Exception ex) {
log.error("补偿失败的pacs补偿id" + id + " 补偿失败了。", ex);
}
}
}
log.info("补偿失败的pacs获取base64文件数据JOB结束");
}
/**
* 1009base64job
*/
@XxlJob("fetchBase64ReportHip1008Job")
public void fetchBase64ReportHip1008Job() {
String xml = redisOps.rPop(FETCH_PACS_BASE64_QUEUE_HIP1008);
ReportDto reportDto = parse(WebserviceMessageType.HIP1008, xml);
if (reportDto != null) {
reportService.report(reportDto);
return;
}
String filePath = FileUtil.currentPath() + File.separator + "fetch-base64-xml"
+ File.separator + WebserviceMessageType.HIP1008
+ File.separator + Func.formatDate(LocalDate.now())
+ File.separator + idService.getDateSeq();
FileUtil.saveStrData(xml, new File(filePath));
ReportDto reportDto2 = hip1008.getReportDtoByInspectionInsert(XmlUtil.of(xml));
SdryPacsPrintExcept pacsPrintExcept = new SdryPacsPrintExcept();
pacsPrintExcept.setInpatientNo(reportDto2.getInpatientNo());
pacsPrintExcept.setAdmissTimes(reportDto2.getAdmisstimes());
pacsPrintExcept.setJzh(reportDto2.getJzh());
pacsPrintExcept.setReportMessagePath(filePath);
pacsPrintExcept.setServiceFlag(WebserviceMessageType.HIP1008);
pacsPrintExcept.setState(0);
pacsPrintExcept.setCreateTime(new Date());
sdryPacsPrintExceptService.insert(pacsPrintExcept);
}
/**
* 1009base64job
*/
@XxlJob("fetchBase64ReportHip1009Job")
public void fetchBase64ReportHip1009Job() {
String xml = redisOps.rPop(FETCH_PACS_BASE64_QUEUE_HIP1009);
ReportDto reportDto = parse(WebserviceMessageType.HIP1009, xml);
if (reportDto != null) {
reportService.report(reportDto);
return;
}
String filePath = FileUtil.currentPath() + File.separator + "fetch-base64-xml"
+ File.separator + WebserviceMessageType.HIP1009
+ File.separator + Func.formatDate(LocalDate.now())
+ File.separator + idService.getDateSeq();
ReportDto reportDto2 = hip1009.getReportDtoByInspectionUpdate(XmlUtil.of(xml));
SdryPacsPrintExcept pacsPrintExcept = new SdryPacsPrintExcept();
pacsPrintExcept.setInpatientNo(reportDto2.getInpatientNo());
pacsPrintExcept.setAdmissTimes(reportDto2.getAdmisstimes());
pacsPrintExcept.setJzh(reportDto2.getJzh());
pacsPrintExcept.setReportMessagePath(filePath);
pacsPrintExcept.setServiceFlag(WebserviceMessageType.HIP1009);
pacsPrintExcept.setState(0);
pacsPrintExcept.setCreateTime(new Date());
sdryPacsPrintExceptService.insert(pacsPrintExcept);
}
private void compensateFetchBase64Report(Long id) {
// base64的和job的检查报告统一处理逻辑不然会出现重复
SdryPacsPrintExcept except = sdryPacsPrintExceptService.getById(id);
String messagePath = except.getReportMessagePath();
String xml = FileUtil.readStr(new File(messagePath));
if (Objects.isNull(xml)) {
log.error("文件:{},获取xml内容为空", messagePath);
return;
}
ReportDto reportDto = parse(except.getServiceFlag(), xml);
if (reportDto != null) {
reportService.report(reportDto);
sdryPacsPrintExceptService.compensateSuccuss(id);
}
}
private ReportDto parse(String serviceFlag, String xml) {
XmlUtil xmlUtil = XmlUtil.of(xml);
if (serviceFlag.equals(WebserviceMessageType.HIP1008)) {
return hip1008.fetchBase64Parse(xmlUtil);
}
if (serviceFlag.equals(WebserviceMessageType.HIP1009)) {
return hip1009.fetchBase64Parse(xmlUtil);
}
return null;
}
}

@ -3,10 +3,12 @@ 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.infrastructure.redis.service.RedisOps;
import com.docus.server.report.api.ShunDePeopleService;
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.job.FetchPacsBase64Job;
import com.docus.server.report.job.ReportJob;
import com.docus.server.report.service.ReportService;
import com.docus.server.report.util.IdUtil;
@ -34,6 +36,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
private ShunDePeopleService shunDePeopleService;
@Resource
private ReportJob reportJob;
@Resource
private RedisOps redisOps;
@Override
@ -48,6 +52,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
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();
// 如果是获取base64的为什么这里要解析因为这里可以提前解析知道问题base64另外抽出来的方法会响应超时为了做异步
ReportDto reportDto = getReportDtoByInspectionInsert(xmlUtil);
verifyFileInfo(reportDto);
String sysFlag = reportDto.getSysFlag();
@ -60,11 +65,9 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
return insertSuccess(msgId, sender, receiver);
}
if (sdRyReportHandledConfig.isFetchBase64(sender)) {
// base64的和job的检查报告统一处理逻辑不然会出现重复
reportDto = fetchBase64Parse(xmlUtil);
if (reportDto == null) {
return insertFailed(msgId, sender, receiver, "未获取到报告PDF文件BASE64信息");
}
// 过程很长保存队列job慢慢消费
redisOps.lPush(FetchPacsBase64Job.FETCH_PACS_BASE64_QUEUE_HIP1008,receiveMessage);
return insertSuccess(msgId, sender, receiver);
}
reportService.report(reportDto);
return insertSuccess(msgId, sender, receiver);
@ -77,7 +80,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive
}
}
private ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) {
public ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) {
Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension");
String updateBy = senderNode.getNodeValue();

@ -3,10 +3,12 @@ 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.infrastructure.redis.service.RedisOps;
import com.docus.server.report.api.ShunDePeopleService;
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.job.FetchPacsBase64Job;
import com.docus.server.report.job.ReportJob;
import com.docus.server.report.service.ReportService;
import com.docus.server.report.util.IdUtil;
@ -34,6 +36,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
private ShunDePeopleService shunDePeopleService;
@Resource
private ReportJob reportJob;
@Resource
private RedisOps redisOps;
@Override
public String handle(String receiveMessage) {
@ -47,6 +52,7 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
sender = xmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension").getNodeValue();
receiver = xmlUtil.getNode("/POOR_HIP1009/receiver/device/id/item/@extension").getNodeValue();
SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig();
// 如果是获取base64的为什么这里要解析因为这里可以提前解析知道问题base64另外抽出来的方法会响应超时为了做异步
ReportDto reportDto = getReportDtoByInspectionUpdate(xmlUtil);
verifyFileInfo(reportDto);
String sysFlag = reportDto.getSysFlag();
@ -59,11 +65,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
return updateSuccess(msgId, sender, receiver);
}
if (sdRyReportHandledConfig.isFetchBase64(sender)) {
// base64的和job的检查报告统一处理逻辑不然会出现重复
reportDto = fetchBase64Parse(xmlUtil);
if (reportDto == null) {
return updateFailed(msgId, sender, receiver, "未获取到报告PDF文件BASE64信息");
}
// 过程很长保存队列job慢慢消费
redisOps.lPush(FetchPacsBase64Job.FETCH_PACS_BASE64_QUEUE_HIP1009,receiveMessage);
return updateSuccess(msgId, sender, receiver);
}
reportService.report(reportDto);
return updateSuccess(msgId, sender, receiver);
@ -76,7 +80,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS
}
}
private ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) {
public ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) {
Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension");
String updateBy = senderNode.getNodeValue();

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docus.server.common.mapper.SdryPacsPrintExceptMapper">
<insert id="insert">
INSERT INTO `docus_archivefile`.`sdry_pacs_print_except`(`id`, `inpatient_no`, `admiss_times`, `jzh`, `report_message_path`, `state`, `create_time`, `service_flag`)
VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag});
</insert>
<update id="compensateSuccuss">
update
`docus_archivefile`.`sdry_pacs_print_except`
set `state`=1
where id=#{id}
</update>
<select id="getById" resultType="com.docus.server.common.entity.SdryPacsPrintExcept">
select
`id`,
`inpatient_no`,
`admiss_times`,
`jzh`,
`report_message_path`,
`state`,
`create_time`,
`service_flag`
from `docus_archivefile`.`sdry_pacs_print_except`
where id=#{id}
</select>
<select id="getCompensateIds" resultType="java.lang.Long">
select
`id`
from
`docus_archivefile`.`sdry_pacs_print_except`
where `state`=0 and `create_time` > #{beginDateTime}
</select>
</mapper>
Loading…
Cancel
Save