diff --git a/data-config/sdry-report-system.json b/data-config/sdry-report-system.json index e080057..2fa2536 100644 --- a/data-config/sdry-report-system.json +++ b/data-config/sdry-report-system.json @@ -1,4 +1,15 @@ { - "blocking": ["xdxt","yx","jc"], - "notHandled":["lis","bl","nh"] + "blocking": [ + "xdxt", + "yx", + "jc" + ], + "notHandled": [ + "lis", + "bl", + "nh" + ], + "fetchBase64": [ + "cta" + ] } \ No newline at end of file diff --git a/src/main/java/com/docus/server/AppRunBootstrap.java b/src/main/java/com/docus/server/AppRunBootstrap.java index 3fa4302..066a783 100644 --- a/src/main/java/com/docus/server/AppRunBootstrap.java +++ b/src/main/java/com/docus/server/AppRunBootstrap.java @@ -7,6 +7,8 @@ import com.docus.infrastructure.web.api.CommonResult; import com.docus.server.api.HospitalSubmitNodeServiceApi; import com.docus.server.api.dto.HospitalSubmitNodeLogAddDTO; import com.docus.server.api.enums.HospitalSubmitNodeEnum; +import com.docus.server.common.entity.SdryPacsPrintExcept; +import com.docus.server.common.service.SdryPacsPrintExceptService; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; @@ -29,7 +31,9 @@ public class AppRunBootstrap { System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); SpringApplication.run(AppRunBootstrap.class, args); } - + private static void test1(){ + SpringUtils.getBean(SdryPacsPrintExceptService.class).insert(new SdryPacsPrintExcept()); + } private static void test(){ HospitalSubmitNodeServiceApi hospitalSubmitNodeServiceApi = SpringUtils.getBean(HospitalSubmitNodeServiceApi.class); HospitalSubmitNodeLogAddDTO dto = new HospitalSubmitNodeLogAddDTO(); diff --git a/src/main/java/com/docus/server/common/entity/RemoteCallResult.java b/src/main/java/com/docus/server/common/entity/RemoteCallResult.java new file mode 100644 index 0000000..85f0e08 --- /dev/null +++ b/src/main/java/com/docus/server/common/entity/RemoteCallResult.java @@ -0,0 +1,84 @@ +package com.docus.server.common.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 涉及远程调用的一些过程信息 + * + * @author wyb + * @date 2023-10-13 + */ +@Data +public class RemoteCallResult implements Serializable { + + private static final long serialVersionUID = 1L; + + + private Long id; + + /** + * 关键词搜索 + */ + private String keyword; + + /** + * 地址 + */ + private String url; + + /** + * 请求头 + */ + private String header; + + /** + * 请求参数 + */ + private String request; + + /** + * 响应结果 + */ + private String response; + + /** + * 异常信息等备注 + */ + private String remark; + + /** + * 接口描述 + */ + private String description; + + /** + * 请求参数存储类型 0表,1本地磁盘 + */ + private Integer requestStorageType; + + /** + * 请求参数存储类型 0表,1本地磁盘 + */ + private Integer responseStorageType; + + /** + * 调用情况 1正常,2连接异常,3业务异常 + */ + private Integer callStatus; + + /** + * 调用开始时间 + */ + private Date callStartTime; + + /** + * 调用结束时间 + */ + private Date callEndTime; + + public RemoteCallResult() { + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java b/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java new file mode 100644 index 0000000..e59e0b3 --- /dev/null +++ b/src/main/java/com/docus/server/common/entity/SdryPacsPrintExcept.java @@ -0,0 +1,63 @@ +package com.docus.server.common.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 顺德人医pacs接口获取base64报告出错的记录 + * @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; + + /** + * 检查报告单号 + */ + + private String examReportSn; + + /** + * 推送的标识 区分新增1008和更新1009 + */ + private String serviceFlag; + + public SdryPacsPrintExcept() {} +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java b/src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java new file mode 100644 index 0000000..0f43145 --- /dev/null +++ b/src/main/java/com/docus/server/common/mapper/RemoteCallResultMapper.java @@ -0,0 +1,18 @@ +package com.docus.server.common.mapper; + +import com.docus.server.common.entity.RemoteCallResult; +import org.apache.ibatis.annotations.Param; + +/** + * 远程调用过程信息表 + * @author wyb + * + */ +public interface RemoteCallResultMapper { + /** + * 远程调用结果存储 + * @param remoteCallResult 远程调用结果 + * @return 保存结果 + */ + int save(@Param("result") RemoteCallResult remoteCallResult); +} diff --git a/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java b/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java new file mode 100644 index 0000000..4ea6b61 --- /dev/null +++ b/src/main/java/com/docus/server/common/mapper/SdryPacsPrintExceptMapper.java @@ -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; + +/** + * 顺德人医pacs接口获取base64报告出错的记录 mapper + * @author wyb + */ +public interface SdryPacsPrintExceptMapper { + int saveExcept(@Param("except") SdryPacsPrintExcept pacsPrintExcept); + + SdryPacsPrintExcept getById(@Param("id") Long id); + + int compensateSuccuss(@Param("id") Long id); + + List getCompensateIds(@Param("beginDateTime") String beginDateTime); +} diff --git a/src/main/java/com/docus/server/common/service/RemoteCallResultService.java b/src/main/java/com/docus/server/common/service/RemoteCallResultService.java new file mode 100644 index 0000000..cc1aedf --- /dev/null +++ b/src/main/java/com/docus/server/common/service/RemoteCallResultService.java @@ -0,0 +1,16 @@ +package com.docus.server.common.service; + +import com.docus.server.common.entity.RemoteCallResult; + +/** + * 远程调用存储服务业务接口 + * @author WYBDEV + */ +public interface RemoteCallResultService { + /** + * 远程调用结果存储 + * @param remoteCallResult 远程调用结果 + */ + void save(RemoteCallResult remoteCallResult); + +} diff --git a/src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java b/src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java new file mode 100644 index 0000000..1049407 --- /dev/null +++ b/src/main/java/com/docus/server/common/service/SdryPacsPrintExceptService.java @@ -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 getCompensateIds(String beginDateTime); +} diff --git a/src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java b/src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java new file mode 100644 index 0000000..687f4aa --- /dev/null +++ b/src/main/java/com/docus/server/common/service/impl/RemoteCallResultServiceImpl.java @@ -0,0 +1,53 @@ +package com.docus.server.common.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.common.entity.RemoteCallResult; +import com.docus.server.common.mapper.RemoteCallResultMapper; +import com.docus.server.common.service.RemoteCallResultService; +import com.docus.server.common.util.FileUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.File; + +/** + * 远程调用存储服务业务实现 + * + * @author wyb + */ +@Service +public class RemoteCallResultServiceImpl implements RemoteCallResultService { + @Resource + private IdService idService; + @Resource + private RemoteCallResultMapper remoteCallResultMapper; + + private final static int SAVE_DISK_DATA_LENGTH = 1024; + + private final static String REMOTE_CALL_SAVE_PATH = FileUtil.currentPath() + File.separator + "remote-call"; + + @Override + public void save(RemoteCallResult remoteCallResult) { + remoteCallResult.setRequestStorageType(0); + remoteCallResult.setResponseStorageType(0); + + Long id = remoteCallResult.getId() == null ? idService.getDateSeq() : remoteCallResult.getId(); + remoteCallResult.setId(id); + String request = remoteCallResult.getRequest(); + String response = remoteCallResult.getResponse(); + if (Func.isNotBlank(request) && request.length() > SAVE_DISK_DATA_LENGTH) { + String saveReqPath = REMOTE_CALL_SAVE_PATH + File.separator + id + "_request"; + FileUtil.saveStrData(response, new File(saveReqPath)); + remoteCallResult.setRequestStorageType(1); + remoteCallResult.setRequest(saveReqPath); + } + if (Func.isNotBlank(response) && response.length() > SAVE_DISK_DATA_LENGTH) { + String saveRespPath = REMOTE_CALL_SAVE_PATH + File.separator + id + "_response"; + FileUtil.saveStrData(response, new File(saveRespPath)); + remoteCallResult.setResponseStorageType(1); + remoteCallResult.setResponse(saveRespPath); + } + remoteCallResultMapper.save(remoteCallResult); + } +} diff --git a/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java b/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java new file mode 100644 index 0000000..6ae982c --- /dev/null +++ b/src/main/java/com/docus/server/common/service/impl/SdryPacsPrintExceptServiceImpl.java @@ -0,0 +1,52 @@ +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 org.springframework.stereotype.Service; + +import javax.annotation.Resource; +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; + + @Override + public int insert(SdryPacsPrintExcept pacsPrintExcept) { + Long id = pacsPrintExcept.getId(); + id = id == null ? idService.getDateSeq() : id; + pacsPrintExcept.setId(id); + return sdryPacsPrintExceptMapper.saveExcept(pacsPrintExcept); + } + + @Override + public SdryPacsPrintExcept getById(Long id) { + return sdryPacsPrintExceptMapper.getById(id); + } + + @Override + public int compensateSuccuss(Long id) { + return sdryPacsPrintExceptMapper.compensateSuccuss(id); + } + + @Override + public List getCompensateIds(String beginDateTime) { + List ids= sdryPacsPrintExceptMapper.getCompensateIds(beginDateTime); + if(Objects.isNull(ids)){ + return new ArrayList<>(); + } + return ids; + } +} diff --git a/src/main/java/com/docus/server/common/util/FileUtil.java b/src/main/java/com/docus/server/common/util/FileUtil.java new file mode 100644 index 0000000..1a8b906 --- /dev/null +++ b/src/main/java/com/docus/server/common/util/FileUtil.java @@ -0,0 +1,95 @@ +package com.docus.server.common.util; + +import com.docus.core.util.Func; + +import java.io.*; + +/** + * 文件工具 + * + * @author WYBDEV + */ +public class FileUtil { + /** + * @return 取得当前jar路径 + */ + public static String currentPath() { + try { + File dir = new File("."); + return dir.getCanonicalPath(); + } catch (Exception e) { + return ""; + } + } + + /** + * 根据文件对象,创建上级目录 + * + * @param file 文件 + * @return 创建结果 + */ + public static boolean mkFileDirs(File file) { + if (!file.getParentFile().exists()) { + return file.getParentFile().mkdirs(); + } + return true; + } + + /** + * 保存字符数据至文件 + * + * @param data 数据 + * @param file 保存的文件 + */ + public static void saveStrData(String data, File file) { + mkFileDirs(file); + FileWriter fileWriter = null; + try { + fileWriter = new FileWriter(file); + fileWriter.write(data); + fileWriter.flush(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (fileWriter != null) { + try { + fileWriter.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + } + + public static void main(String[] args) throws Exception { + 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(); + } + } + } + } +} diff --git a/src/main/java/com/docus/server/report/api/dto/ReportDto.java b/src/main/java/com/docus/server/report/api/dto/ReportDto.java index 708f3e4..485f5bc 100644 --- a/src/main/java/com/docus/server/report/api/dto/ReportDto.java +++ b/src/main/java/com/docus/server/report/api/dto/ReportDto.java @@ -84,6 +84,8 @@ public class ReportDto { */ private String reportSn; + + public ReportDto() { } diff --git a/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java b/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java index 5ee9e1f..1def689 100644 --- a/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java +++ b/src/main/java/com/docus/server/report/api/impl/ShunDePeopleServiceImpl.java @@ -6,13 +6,17 @@ import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.docus.core.util.DateUtil; +import com.docus.core.util.ExceptionUtils; import com.docus.core.util.Func; import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.common.entity.RemoteCallResult; +import com.docus.server.common.service.RemoteCallResultService; import com.docus.server.report.api.ShunDePeopleService; import com.docus.server.report.api.dto.*; import com.docus.server.report.api.vo.SdRyBloodReportVO; import com.docus.server.report.client.JaxWsDynamicClient; import com.docus.server.report.config.SdRyReportQueryConfig; +import com.docus.server.report.job.ReportJob; import com.docus.server.report.util.IdUtil; import com.docus.server.report.util.TableJsonRead; import com.docus.server.report.util.XmlUtil; @@ -22,10 +26,7 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -47,6 +48,10 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { @Resource private SdRyReportQueryConfig sdRyReportQueryConfig; + @Resource + private ReportJob reportJob; + @Resource + private RemoteCallResultService remoteCallResultService; @Override @@ -141,18 +146,51 @@ public class ShunDePeopleServiceImpl implements ShunDePeopleService { // 参数3(FunctionType):传空,暂未启用 // 参数4(Caller):服务调用者名称,由PACS提供,验证令牌时 String[] param = {functionName, inputString, functionType, caller}; + + RemoteCallResult remoteCallResult = new RemoteCallResult(); + remoteCallResult.setUrl(url+" | "+namespaceUri+" | "+operationName); + remoteCallResult.setRequest(Arrays.toString(param)); + remoteCallResult.setDescription("根据检查流水和报告序列号,指定要获取的报告,PACS将生成PDF格式的报告,并将PDF文件的BASE64编码串返回。"); + remoteCallResult.setKeyword(examNo + "_" + reportNo); + remoteCallResult.setCallStartTime(new Date()); + + PACS_PDF_LOCK.lock(); try { String result = JaxWsDynamicClient.send(url, namespaceUri, operationName, param); if (interval > 0) { TimeUnit.MILLISECONDS.sleep(interval); } + remoteCallResult.setCallStatus(1); + String base64 = reportJob.parsePacsGetBase64(result); + if(Func.isBlank(base64)){ + remoteCallResult.setRemark("查询base64结果为空!"); + remoteCallResult.setCallStatus(3); + } + remoteCallResult.setResponse(result); + remoteCallResult.setCallEndTime(new Date()); + try { + remoteCallResultService.save(remoteCallResult); + }catch (Exception e){ + e.printStackTrace(); + } return result; } catch (Exception ex) { log.error(ex.getMessage(), ex); + String exceptionMessage = ExceptionUtils.getExceptionMessage(ex); + remoteCallResult.setRemark(ex.getMessage()); + remoteCallResult.setCallStatus(2); + remoteCallResult.setResponse(exceptionMessage); + remoteCallResult.setCallEndTime(new Date()); + try { + remoteCallResultService.save(remoteCallResult); + }catch (Exception e){ + e.printStackTrace(); + } return null; } finally { PACS_PDF_LOCK.unlock(); + } } diff --git a/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java b/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java index ab885a4..0d7bd2b 100644 --- a/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java +++ b/src/main/java/com/docus/server/report/config/SdRyReportHandledConfig.java @@ -8,49 +8,73 @@ import java.util.List; /** * 应用业务配置 + * * @author wyb */ public class SdRyReportHandledConfig { - private final SdRyReportSystem sdRyReportSystem; + private final static TableJsonRead JSON_READ = new TableJsonRead(); + @Data - private static class SdRyReportSystem{ + private static class SdRyReportSystem { /** - * 需要阻塞的报告来源系统 + * 需要阻塞的报告来源系统,报告和描述信息分开推送 */ - private List blocking = new ArrayList<>(); + private List blocking = new ArrayList<>(); /** - * 不处理的报告来源系统 + * 不处理的报告来源系统,job处理 */ private List notHandled = new ArrayList<>(); + + /** + * 需要获取base64的报告来源系统,原job处理的直接移动过来 + */ + private List fetchBase64 = new ArrayList<>(); } - public SdRyReportHandledConfig(){ - TableJsonRead jsonRead = new TableJsonRead(); - this.sdRyReportSystem= jsonRead.Read("data-config", "sdry-report-system.json", SdRyReportSystem.class); + + public SdRyReportHandledConfig() { + } - public boolean isBlocking(String systemName){ - if(this.sdRyReportSystem!=null){ - List blocking = this.sdRyReportSystem.getBlocking(); + + public SdRyReportSystem getSdRyReportSystem() { + return JSON_READ.Read("data-config", "sdry-report-system.json", SdRyReportSystem.class); + } + + public boolean isBlocking(String systemName) { + SdRyReportSystem sdRyReportSystem = getSdRyReportSystem(); + if (sdRyReportSystem != null) { + List blocking = sdRyReportSystem.getBlocking(); return blocking.contains(systemName); } return false; } - public boolean isNotHandled(String systemName){ - if(this.sdRyReportSystem!=null){ - List notHandled = this.sdRyReportSystem.getNotHandled(); + public boolean isNotHandled(String systemName) { + SdRyReportSystem sdRyReportSystem = getSdRyReportSystem(); + if (sdRyReportSystem != null) { + List notHandled = sdRyReportSystem.getNotHandled(); return notHandled.contains(systemName); } return false; } + public boolean isFetchBase64(String systemName) { + SdRyReportSystem sdRyReportSystem = getSdRyReportSystem(); + if (sdRyReportSystem != null) { + List getBase64System = sdRyReportSystem.getFetchBase64(); + return getBase64System.contains(systemName); + } + return false; + } + public static void main(String[] args) { SdRyReportHandledConfig sdRyReportHandledConfig = new SdRyReportHandledConfig(); - System.out.println(sdRyReportHandledConfig.sdRyReportSystem); + System.out.println(sdRyReportHandledConfig.getSdRyReportSystem()); System.out.println(sdRyReportHandledConfig.isNotHandled("lis")); System.out.println(sdRyReportHandledConfig.isNotHandled("yx")); System.out.println(sdRyReportHandledConfig.isBlocking("yx")); System.out.println(sdRyReportHandledConfig.isBlocking("lis")); + System.out.println(sdRyReportHandledConfig.isFetchBase64("cta")); } } diff --git a/src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java b/src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java new file mode 100644 index 0000000..0e4bea6 --- /dev/null +++ b/src/main/java/com/docus/server/report/controller/FetchPacsBase64ExceptController.java @@ -0,0 +1,35 @@ +package com.docus.server.report.controller; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.report.job.FetchPacsBase64Job; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@Slf4j +@Api(tags = "pacs获取base64异常相关接口") +@RestController +@RequestMapping("/api/fetchPacsBase64Except") +public class FetchPacsBase64ExceptController { + @Resource + private FetchPacsBase64Job fetchPacsBase64Job; + + + @ApiOperation(value = "根据异常数据表的id补偿") + @GetMapping("/compenstateById") + public CommonResult compenstateById(@Param("id") Long exceptId) { + fetchPacsBase64Job.compensateFetchBase64Report(exceptId); + return CommonResult.success("完成"); + } + + + + + +} diff --git a/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java new file mode 100644 index 0000000..14d3e90 --- /dev/null +++ b/src/main/java/com/docus/server/report/job/FetchPacsBase64Job.java @@ -0,0 +1,166 @@ +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; + +/** + * pacs获取base64报告相关xxl-Job + * + * @author jiashi + */ +@Component +@Slf4j +public class FetchPacsBase64Job { + /** + * 从pacs获取pdf报告base64内容时间过长,异步使用队列,采用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 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结束!"); + } + + /** + * 检查报告1008新增需要获取base64报告的job + */ + @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()); + pacsPrintExcept.setExamReportSn(reportDto2.getReportSn()); + sdryPacsPrintExceptService.insert(pacsPrintExcept); + } + + /** + * 检查报告1009更新需要获取base64报告的job + */ + @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.setExamReportSn(reportDto2.getReportSn()); + pacsPrintExcept.setCreateTime(new Date()); + sdryPacsPrintExceptService.insert(pacsPrintExcept); + } + + public void compensateFetchBase64Report(Long id) { + // base64的和job的检查报告统一处理逻辑,不然会出现重复 + SdryPacsPrintExcept except = sdryPacsPrintExceptService.getById(id); + if(Objects.isNull(except)){ + log.error("未找到id为:{} 的获取pacs异常的数据!",id); + return; + } + 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; + } + +} diff --git a/src/main/java/com/docus/server/report/job/ReportJob.java b/src/main/java/com/docus/server/report/job/ReportJob.java index a237694..fb53254 100644 --- a/src/main/java/com/docus/server/report/job/ReportJob.java +++ b/src/main/java/com/docus/server/report/job/ReportJob.java @@ -657,7 +657,7 @@ public class ReportJob { } - private String saveBase64(String base64) { + public String saveBase64(String base64) { String dir = createBase64SaveDir(); String base64File = dir + File.separator + idService.getDateSeq() + ".txt"; try (FileWriter fileWriter = new FileWriter(base64File); @@ -691,7 +691,7 @@ public class ReportJob { } } - private static String parsePacsGetBase64(String xml) { + public String parsePacsGetBase64(String xml) { try { XmlUtil xmlUtil = XmlUtil.of(xml); Node codeNode = xmlUtil.getNode("/Result/Code"); diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java index c72eae2..1ae51d7 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1008InspectionReportAdditionHandler.java @@ -3,9 +3,13 @@ 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; import com.docus.server.report.util.XmlUtil; @@ -20,6 +24,7 @@ import java.util.Date; /** * HIP1008-检查报告新增服务处理 + * * @author jiahsi */ @Service(WebserviceMessageType.HIP1008) @@ -27,6 +32,13 @@ import java.util.Date; public class HIP1008InspectionReportAdditionHandler implements WebserviceReceiveServerHandler { @Resource private ReportService reportService; + @Resource + private ShunDePeopleService shunDePeopleService; + @Resource + private ReportJob reportJob; + @Resource + private RedisOps redisOps; + @Override public String handle(String receiveMessage) { @@ -40,17 +52,23 @@ 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(); if (sdRyReportHandledConfig.isNotHandled(sysFlag)) { return insertSuccess(msgId, sender, receiver); } - if(sdRyReportHandledConfig.isBlocking(sysFlag)){ + if (sdRyReportHandledConfig.isBlocking(sysFlag)) { reportDto.setDownUrl(null); reportService.reportBuffer(reportDto); return insertSuccess(msgId, sender, receiver); } + if (sdRyReportHandledConfig.isFetchBase64(sender)) { + // 过程很长,保存队列,job慢慢消费 + redisOps.lPush(FetchPacsBase64Job.FETCH_PACS_BASE64_QUEUE_HIP1008,receiveMessage); + return insertSuccess(msgId, sender, receiver); + } reportService.report(reportDto); return insertSuccess(msgId, sender, receiver); } catch (BaseException baseException) { @@ -61,12 +79,72 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive return insertFailed(msgId, sender, receiver, "系统错误!"); } } + + public ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { + Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension"); + String updateBy = senderNode.getNodeValue(); + + + Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); + 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()); + + // 患者本次就诊唯一键:患者id【12位】+就诊次数 + Node visitSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.11']/@extension"); + String visitSn = visitSnNode.getNodeValue(); + + // 患者id + Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/item[@root='2.16.156.10011.0.2.2']/@extension"); + String patientSn = patientSnNode.getNodeValue(); + + // 检查报告单号标识 + Node reportFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.32']/@extension"); + String examReportSn = reportFlagNode.getNodeValue(); + //电子申请单编号 + Node eafNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.24']/@extension"); + String requestSn = eafNoNode.getNodeValue(); + + + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String reportName = fileTitleNode.getTextContent(); + + + ReportDto reportDto = new ReportDto(); + reportDto.setAdmisstimes(admissTimes); + reportDto.setInpatientNo(inpatientNo); + // 确定报告唯一 报告单号+申请单号 + reportDto.setSerialnum(examReportSn + requestSn); + reportDto.setFileTitle(reportName); + reportDto.setVisitSn(visitSn); + reportDto.setPatientSn(patientSn); + + // 检查报告需要从Pacs接口获取base64 + String[] split = examReportSn.split("_"); + String fromPacs = shunDePeopleService.getBase64PdfFromPacs(split[0], split[1]); + // 从pacs打印出来 + String base64 = reportJob.parsePacsGetBase64(fromPacs); + if (Func.isBlank(base64)) { + return null; + } + String url = reportJob.saveBase64(base64); + reportDto.setDownUrl(url); + reportDto.setDowntype(5); + // 根据系统来分类 + reportDto.setAssortId(ZdAssortConfig.getZdAssortId(updateBy)); + reportDto.setSysFlag(updateBy); + reportDto.setFileSource("1"); + reportDto.setFilestoragetype("1"); + return reportDto; + } + public ReportDto getReportDtoByInspectionInsert(XmlUtil inspectionInsertXmlUtil) { Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/sender/device/id/item/@extension"); String sender = senderNode.getNodeValue(); String zdAssortId = ZdAssortConfig.getZdAssortId(sender); - if(Func.isBlank(zdAssortId)){ - zdAssortId=ZdAssortConfig.getOtherAssortId(); + if (Func.isBlank(zdAssortId)) { + zdAssortId = ZdAssortConfig.getOtherAssortId(); } Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); @@ -89,8 +167,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive // Node sysFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); // String sysFlag = sysFlagNode.getNodeValue(); - Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); - String fileTitle = fileTitleNode.getNodeValue(); + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String fileTitle = fileTitleNode.getTextContent(); Node downUrlNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1008/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告图像']/report/entry[@displayName='检查报告图像URL地址']/observation/value"); String downUrl = downUrlNode.getTextContent(); @@ -120,8 +198,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive public String insertSuccess(String msgId, String sender, String receiver) { String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -142,7 +220,7 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive "" + "" + "" + - "" + + "" + "" + "" + "" + @@ -193,8 +271,8 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -215,10 +293,10 @@ public class HIP1008InspectionReportAdditionHandler implements WebserviceReceive "" + "" + "" + - "" + + "" + "" + "" + - "" + + "" + "" + "" + ""; diff --git a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java index f037ae7..6520e8a 100644 --- a/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java +++ b/src/main/java/com/docus/server/report/webservice/impl/HIP1009InspectionReportUpdatesHandler.java @@ -3,9 +3,13 @@ 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; import com.docus.server.report.util.XmlUtil; @@ -20,6 +24,7 @@ import java.util.Date; /** * HIP1009-检查报告更新服务 + * * @author jiahsi */ @Service(WebserviceMessageType.HIP1009) @@ -27,6 +32,13 @@ import java.util.Date; public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveServerHandler { @Resource private ReportService reportService; + @Resource + private ShunDePeopleService shunDePeopleService; + @Resource + private ReportJob reportJob; + @Resource + private RedisOps redisOps; + @Override public String handle(String receiveMessage) { @@ -40,17 +52,23 @@ 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(); if (sdRyReportHandledConfig.isNotHandled(sysFlag)) { return updateSuccess(msgId, sender, receiver); } - if(sdRyReportHandledConfig.isBlocking(sysFlag)){ + if (sdRyReportHandledConfig.isBlocking(sysFlag)) { reportDto.setDownUrl(null); reportService.reportBuffer(reportDto); return updateSuccess(msgId, sender, receiver); } + if (sdRyReportHandledConfig.isFetchBase64(sender)) { + // 过程很长,保存队列,job慢慢消费 + redisOps.lPush(FetchPacsBase64Job.FETCH_PACS_BASE64_QUEUE_HIP1009,receiveMessage); + return updateSuccess(msgId, sender, receiver); + } reportService.report(reportDto); return updateSuccess(msgId, sender, receiver); } catch (BaseException baseException) { @@ -64,12 +82,70 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS + public ReportDto fetchBase64Parse(XmlUtil inspectionInsertXmlUtil) { + Node senderNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension"); + String updateBy = senderNode.getNodeValue(); + + + Node inpatientNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); + 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()); + + // 患者本次就诊唯一键:患者id【12位】+就诊次数 + Node visitSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.11']/@extension"); + String visitSn = visitSnNode.getNodeValue(); + + // 患者id + Node patientSnNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/item[@root='2.16.156.10011.0.2.2']/@extension"); + String patientSn = patientSnNode.getNodeValue(); + + // 检查报告单号标识 + Node reportFlagNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.32']/@extension"); + String examReportSn = reportFlagNode.getNodeValue(); + //电子申请单编号 + Node eafNoNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.24']/@extension"); + String requestSn = eafNoNode.getNodeValue(); + + Node fileTitleNode = inspectionInsertXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String reportName = fileTitleNode.getTextContent(); + + + ReportDto reportDto = new ReportDto(); + reportDto.setAdmisstimes(admissTimes); + reportDto.setInpatientNo(inpatientNo); + // 确定报告唯一 报告单号+申请单号 + reportDto.setSerialnum(examReportSn + requestSn); + reportDto.setFileTitle(reportName); + reportDto.setVisitSn(visitSn); + reportDto.setPatientSn(patientSn); + + // 检查报告需要从Pacs接口获取base64 + String[] split = examReportSn.split("_"); + String fromPacs = shunDePeopleService.getBase64PdfFromPacs(split[0], split[1]); + // 从pacs打印出来 + String base64 = reportJob.parsePacsGetBase64(fromPacs); + if (Func.isBlank(base64)) { + return null; + } + String url = reportJob.saveBase64(base64); + reportDto.setDownUrl(url); + reportDto.setDowntype(5); + // 根据系统来分类 + reportDto.setAssortId(ZdAssortConfig.getZdAssortId(updateBy)); + reportDto.setSysFlag(updateBy); + reportDto.setFileSource("1"); + reportDto.setFilestoragetype("1"); + return reportDto; + } + public ReportDto getReportDtoByInspectionUpdate(XmlUtil inspectionUpdateXmlUtil) { Node senderNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/sender/device/id/item/@extension"); String sender = senderNode.getNodeValue(); String zdAssortId = ZdAssortConfig.getZdAssortId(sender); - if(Func.isBlank(zdAssortId)){ - zdAssortId=ZdAssortConfig.getOtherAssortId(); + if (Func.isBlank(zdAssortId)) { + zdAssortId = ZdAssortConfig.getOtherAssortId(); } Node inpatientNoNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/recordTarget/patientRole/id[@root='2.16.156.10011.1.12']/@extension"); @@ -92,8 +168,9 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS // Node sysFlagNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查类型']/observation/code/@displayName"); // String sysFlag = sysFlagNode.getNodeValue(); - Node fileTitleNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告']/section/entry[@displayName='检查报告类型']/observation/code/@displayName"); - String fileTitle = fileTitleNode.getNodeValue(); + + Node fileTitleNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查结果明细']/section/entry[@displayName='检查项目']/organizer/component[@displayName='检查项目']/observation/value"); + String fileTitle = fileTitleNode.getTextContent(); Node downUrlNode = inspectionUpdateXmlUtil.getNode("/POOR_HIP1009/controlActProcess/subject/component/structuredBody/component[@displayName='检查报告图像']/report/entry[@displayName='检查报告图像URL地址']/observation/value"); String downUrl = downUrlNode.getTextContent(); @@ -126,8 +203,8 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -148,7 +225,7 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS "" + "" + "" + - "" + + "" + "" + "" + "" + @@ -200,8 +277,8 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS public String updateFailed(String msgId, String sender, String receiver, String failedMessage) { String createTime = Func.format(new Date(), DateUtil.PATTERN_DATETIME_MINI); return "" + - "" + - "" + + "" + + "" + "" + "" + "" + @@ -222,10 +299,10 @@ public class HIP1009InspectionReportUpdatesHandler implements WebserviceReceiveS "" + "" + "" + - "" + + "" + "" + "" + - "" + + "" + "" + "" + ""; diff --git a/src/main/resources/mapper/RemoteCallResultMapper.xml b/src/main/resources/mapper/RemoteCallResultMapper.xml new file mode 100644 index 0000000..6bc0223 --- /dev/null +++ b/src/main/resources/mapper/RemoteCallResultMapper.xml @@ -0,0 +1,11 @@ + + + + + + INSERT INTO `docus_archivefile`.`remote_call_result`(`id`, `keyword`, `url`, `header`, `request`, `response`, `remark`, `description`, `request_storage_type`, `response_storage_type`, `call_status`, `call_start_time`, `call_end_time`) + VALUES (#{result.id}, #{result.keyword}, #{result.url}, #{result.header}, #{result.request}, #{result.response}, #{result.remark}, #{result.description}, #{result.requestStorageType}, #{result.responseStorageType}, #{result.callStatus}, #{result.callStartTime}, #{result.callEndTime}) + + diff --git a/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml b/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml new file mode 100644 index 0000000..7411c81 --- /dev/null +++ b/src/main/resources/mapper/SdryPacsPrintExceptMapper.xml @@ -0,0 +1,38 @@ + + + + + + + INSERT INTO `docus_archivefile`.`sdry_pacs_print_except`(`id`, `inpatient_no`, `admiss_times`, `jzh`, `report_message_path`, `state`, `create_time`, `service_flag`,`exam_report_sn`) + VALUES (#{except.id}, #{except.inpatientNo}, #{except.admissTimes}, #{except.jzh}, #{except.reportMessagePath}, 0, #{except.createTime}, #{except.serviceFlag},#{except.examReportSn}) + + + update + `docus_archivefile`.`sdry_pacs_print_except` + set `state`=1 + where id=#{id} + + + +