导出国标病历

master
linjj 1 year ago
parent e8df06ec93
commit 35a0f430af

@ -3,10 +3,7 @@ package com.emr.controller;
import com.alibaba.fastjson.JSON;
import com.emr.dao.Emr_DictionaryMapper;
import com.emr.entity.*;
import com.emr.service.Archive_DetailService;
import com.emr.service.Archive_MasterService;
import com.emr.service.OverdueRemindService;
import com.emr.service.Zd_AssortService;
import com.emr.service.*;
import com.emr.service.ipml.TBasicBrowseHistoryService;
import com.emr.util.ExceptionPrintUtil;
import com.emr.util.HttpClientUtils;
@ -59,6 +56,8 @@ public class FontController {
@Autowired
private OverdueRemindService overdueRemindService;
@Autowired
private BatchExportService batchExportService;
/***************************提供第三方按多个分段id和记账号查询病历pdf***********************************/
/**
@ -512,5 +511,17 @@ public class FontController {
overdueRemindVO.setDoctorInCharge(s);
overdueRemindService.updatetOverdueStatcByDoctorId(overdueRemindVO);
}
/**
* @description:
* @params: taskid
* @return: String
* @author linjj
* @date: 2024/4/12 13:55
*/
@ResponseBody
@RequestMapping(value = "BatchExportPdf")
public String batchExportPdf(int taskid) throws Exception {
return batchExportService.batchExportPdf(taskid);
}
}

@ -0,0 +1,22 @@
package com.emr.dao;
import com.emr.vo.ExportTaskDetailsVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @InterfaceName ExportTaskDetailsMapper
* @Description
* @Author linjj
* @Date 2024/4/12 14:03
* @Version 1.0
*/
public interface ExportTaskDetailsMapper {
List<ExportTaskDetailsVo> selectAllByTaskId(int taskId);
List<String> getMasterId(@Param("inpNo") String inpNo, @Param("dischargeDateTime") String dischargeDateTime);
int upStatc(@Param("state") int state,@Param("id") int id);
}

@ -5,6 +5,7 @@ import com.emr.vo.ExportTaskVo;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@ -21,4 +22,6 @@ public interface BatchExportService {
//查询所有任务
List<ExportTaskVo> selectAll(int taskState);
//批量导出
String batchExportPdf(int taskid)throws Exception;
}

@ -1,17 +1,29 @@
package com.emr.service.ipml;
import com.emr.dao.BatchExportMapper;
import com.emr.dao.ExportTaskDetailsMapper;
import com.emr.dao.ExportZdAssortMapper;
import com.emr.dto.DownloadPdfBloodDto;
import com.emr.service.BatchExportService;
import com.emr.util.Logger;
import com.emr.vo.ExportPdfVo;
import com.emr.vo.ExportTaskDetailsVo;
import com.emr.vo.ExportTaskVo;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
@ -23,11 +35,169 @@ import java.util.List;
*/
@Service
public class BatchExportServiceImpl implements BatchExportService {
private static Logger logger = new Logger();
@Autowired
BatchExportMapper batchExportMapper;
@Autowired
ExportTaskDetailsMapper exportTaskDetailsMapper;
@Autowired
private ExportZdAssortMapper exportZdAssortMapper;
@Value("${export_pdf_hospital_info}")
private String flieName;
@Override
public List<ExportTaskVo> selectAll(int taskState) {
return batchExportMapper.selectAll(taskState);
}
@Override
public String batchExportPdf(int taskid) throws Exception {
//导出文件名
String fileName=null;
//根据taskid查询所有需要导出病历的住院号出院日期
List<ExportTaskDetailsVo> taskList = exportTaskDetailsMapper.selectAllByTaskId(taskid);
if (CollectionUtils.isEmpty(taskList)) {
return "没有任务";
}
for (ExportTaskDetailsVo list : taskList) {
//根据住院号出院日期查询需要导出病历路径
List<String> masterIds = exportTaskDetailsMapper.getMasterId(list.getInpNo(), list.getDischargeDateTime());
if (CollectionUtils.isEmpty(masterIds)) {
logger.log("病案号为:" + list.getInpNo() + "出院时间为:" + list.getDischargeDateTime() + "的病历找不到。");
continue;
}
for (String masterId : masterIds) {
List<ExportPdfVo> pdfPathList = exportZdAssortMapper.getPdfPath(masterId);
if (CollectionUtils.isEmpty(pdfPathList)){
logger.log("病案号为:" + list.getInpNo() + "出院时间为:" + list.getDischargeDateTime() + "的病历查询不到影像");
continue;
}
try {
//组织导出文件名
fileName = exportFlieName(list);
} catch (ParseException e) {
throw new RuntimeException(e);
}
// downPdfResponse(fileName,response);
Boolean aBoolean = exportPdf(pdfPathList,fileName);
//为true时修改任务状态1完成2失败
if (aBoolean){
exportTaskDetailsMapper.upStatc(1,list.getId());
}else {
exportTaskDetailsMapper.upStatc(2,list.getId());
}
}
}
return "下载完成";
}
private void downPdfResponse(String pdfName, HttpServletResponse response) {
try {
pdfName = java.net.URLEncoder.encode(pdfName, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
response.reset();
response.setContentType("application/pdf");
response.setHeader("content-disposition", "attachment; filename=" + pdfName + ".pdf");
}
private static Boolean exportPdf(List<ExportPdfVo> pdfPathList,String fileName) {
//上一个目录名称
String lastOutline = null;
//是否增加标签
boolean outFlag = true;
//标签顺序
Integer outNum = 1;
Integer pageNum=1;
Document document = new Document();
PdfCopy writer = null;
try {
FileOutputStream fileOutputStream = new FileOutputStream("D://export//"+fileName+".pdf");
writer = new PdfCopy(document,fileOutputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
cb.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12);
cb.beginText();
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "目录", 300, 780, 0);
cb.endText();
// 创建目录
PdfOutline root = cb.getRootOutline();
for (int i = 0; i < pdfPathList.size(); i++) {
try {
String assortName = pdfPathList.get(i).getAssortName();
if (StringUtils.isNotBlank(lastOutline) && lastOutline.equals(assortName)) {
outFlag = false;
}
if (StringUtils.isBlank(lastOutline)) {
lastOutline = assortName;
outFlag=true;
}
if (!lastOutline.equals(assortName)){
lastOutline = assortName;
outFlag=true;
}
com.itextpdf.text.pdf.PdfReader reader = new PdfReader(pdfPathList.get(i).getPdfPath());
int n = reader.getNumberOfPages();
for (int s = 1; s <= n; s++) {
PdfImportedPage page = writer.getImportedPage(reader, s);
writer.addPage(page);
}
if (outFlag) {
//目录跳转页面内容设置。
PdfAction action = PdfAction.gotoLocalPage(pageNum, new PdfDestination(PdfDestination.FIT), writer);
//标题目录
String title = outNum+"."+pdfPathList.get(i).getAssortName();
new PdfOutline(root, action, title, false);
outNum++;
}
pageNum =pageNum+getPageNum(pdfPathList.get(i));
} catch (Exception e) {
return false;
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (document != null) {
document.close();
}
}
return true;
}
//获取pdf页码
private static int getPageNum(ExportPdfVo obj) {
FileInputStream is;
com.itextpdf.kernel.pdf.PdfReader pdfReader = null;
int pages = 0;
//创建File类
File file = new File(obj.getPdfPath());
//判断文件是否存在
if (file.exists()) {
try {
is = new FileInputStream(file);
pdfReader = new com.itextpdf.kernel.pdf.PdfReader(is);
com.itextpdf.kernel.pdf.PdfDocument redDocument = new com.itextpdf.kernel.pdf.PdfDocument(pdfReader);
pages = redDocument.getNumberOfPages();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return pages;
}
//生成文件名
private String exportFlieName(ExportTaskDetailsVo dto) throws ParseException {
SimpleDateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat targetFormat = new SimpleDateFormat("yyyyMMdd");
Date date = originalFormat.parse(dto.getDischargeDateTime());
String formattedDate = targetFormat.format(date);
return flieName + "_" + dto.getInpNo() + "_" + formattedDate;
}
}

@ -0,0 +1,38 @@
package com.emr.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Logger {
public void log(String info) {
SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
String format = dateFormat.format (new Date());
File file = new File ("D:\\export\\logs\\"+format);
if(!file.isDirectory ()){
file.mkdirs ();
}
OutputStream out = null;
try {
out = getOutputStream(file.getAbsolutePath ()+"\\log.log");
out.write(info.getBytes("utf-8"));
out.write("\r\n".getBytes());
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public OutputStream getOutputStream(String localpath) throws IOException {
File file = new File(localpath);
if (!file.exists()) {
file.createNewFile();
return new FileOutputStream(file);
} else {
return new FileOutputStream(file, true);
}
}
}

@ -0,0 +1,24 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName ExportTaskDetailsVo
* @Description
* @Author linjj
* @Date 2024/4/12 14:01
* @Version 1.0
*/
@Data
public class ExportTaskDetailsVo {
private int id;
//任务id
private int taskId;
//住院号
private String inpNo;
//出院日期
private String dischargeDateTime;
}

@ -14,6 +14,7 @@
/toLogin=anon <!--表示都可以访问-->
/static/**=anon <!--表示都可以访问-->
/error=authc
/font=authc
/test=anon
/login=anon
/home=perms[home] <!--perms表示需要该权限才能访问的页面-->

@ -0,0 +1,21 @@
<?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.emr.dao.ExportTaskDetailsMapper">
<update id="upStatc">
update Export_Task_Details set state=#{state} where id=#{id}
</update>
<select id="selectAllByTaskId" resultType="com.emr.vo.ExportTaskDetailsVo">
SELECT id,
taskId,
inpNo,
CONVERT(VARCHAR (100), dischargeDateTime, 23) as dischargeDateTime
FROM Export_Task_Details
WHERE taskId = #{taskId}
AND state = 0
</select>
<select id="getMasterId" resultType="java.lang.String">
select id from Archive_Master where inp_no=#{inpNo} AND CONVERT(VARCHAR (100), discharge_date_time, 23) = #{dischargeDateTime}
</select>
</mapper>
Loading…
Cancel
Save