pacs补偿按钮

master
linjj 1 year ago
parent 584c7c40ec
commit 7d1314fa7f

@ -75,6 +75,12 @@
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.1.11</version>
</dependency>
<!--json-->
<!-- httpclient -->
<dependency>

@ -5,6 +5,7 @@ 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.BatchExportService;
import com.emr.service.ipml.TPrintinfoService;
import com.emr.service.ipml.ZdAssortService;
import com.emr.util.ExceptionPrintUtil;
@ -45,6 +46,8 @@ public class FontController {
private ZdAssortService assortService;
@Autowired
private Archive_DetailService archiveDetailService;
@Autowired
private BatchExportService batchExportService;
@RequestMapping("selectIsPrintByPatienId")
@ResponseBody
public Msg selectIsPrintByPatienId(String patientId){
@ -428,4 +431,15 @@ public class FontController {
ExceptionPrintUtil.printException(e);
}
}
/**
* @description:
* @author linjj
* @date: 2024/4/29 15:27
*/
@ResponseBody
@RequestMapping(value = "BatchExportPdf")
public String batchExportPdf(int taskId) throws Exception {
return batchExportService.batchExportPdf(taskId);
}
}

@ -0,0 +1,18 @@
package com.emr.dao;
import com.emr.vo.ExportTaskVo;
import java.util.List;
/**
* @InterfaceName BatchExportMapper
* @Description
* @Author linjj
* @Date 2024/4/12 11:44
* @Version 1.0
*/
public interface BatchExportMapper {
//查询所有任务
List<ExportTaskVo> selectAll(int taskState);
}

@ -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);
}

@ -0,0 +1,14 @@
package com.emr.dao;
import com.emr.vo.ExportPdfVo;
import com.emr.vo.ExportZdAssortVo;
import java.util.List;
public interface ExportZdAssortMapper {
List<ExportPdfVo>getPdfPath(String masterId);
List<ExportZdAssortVo>selectAll();
}

@ -0,0 +1,20 @@
package com.emr.service;
import com.emr.vo.ExportTaskVo;
import java.util.List;
/**
* @InterfaceName BatchExportService
* @Description
* @Author linjj
* @Date 2024/4/12 11:40
* @Version 1.0
*/
public interface BatchExportService {
//查询所有任务
List<ExportTaskVo> selectAll(int taskState);
//批量导出
String batchExportPdf(int taskid)throws Exception;
}

@ -0,0 +1,201 @@
package com.emr.service.ipml;
import com.emr.dao.BatchExportMapper;
import com.emr.dao.ExportTaskDetailsMapper;
import com.emr.dao.ExportZdAssortMapper;
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.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 javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* @ClassName BatchExportServiceImpl
* @Description
* @Author linjj
* @Date 2024/4/12 11:41
* @Version 1.0
*/
@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;
}
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,19 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName ExportPdfVo
* @Description pdf
* @Author linjj
* @Date 2024/4/11 8:47
* @Version 1.0
*/
@Data
public class ExportPdfVo {
private String pdfPath;
private String assortID;
private String assortSort;
private String assortName;
}

@ -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;
}

@ -0,0 +1,26 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName ExportTaskVo
* @Description
* @Author linjj
* @Date 2024/4/12 11:37
* @Version 1.0
*/
@Data
public class ExportTaskVo {
//批次id
private int id;
//开始时间
private String startTime;
//结束时间
private String endTime;
//0未开始1正在下载2下载完成
private int taskState;
//完成数量
private int completeNum;
//需求数量
private int needNum;
}

@ -0,0 +1,19 @@
package com.emr.vo;
import lombok.Data;
/**
* @ClassName ExportZdAssortVo
* @Description
* @Author linjj
* @Date 2024/4/10 16:52
* @Version 1.0
*/
@Data
public class ExportZdAssortVo {
private String assortId;
private String assortName;
private String assortSort;
private String exportFlag;
}

@ -53,6 +53,8 @@ POWER_JSP=http://localhost:8084/power
recallReason=\u533B\u9662\u9700\u8981\u8FD9\u4EFD\u6587\u6863
HomepageDictionary=http://localhost:8080/WholeCheckInterface/services/HomepageDictionary?wsdl
HomepageMethod=CheckData
#\u5bfc\u51fa\u4fe1\u606f\u683c\u5f0f\u9700\u8981\u4e3aunicode\u683c\u5f0f\u4e0d\u7136\u4f1a\u4e71\u7801
export_pdf_hospital_info = \u5e7f\u4e1c\u7701_\u5e7f\u4e1c\u533b\u79d1\u5927\u5b66\u9644\u5c5e\u533b\u9662
#
#
#
@ -62,13 +64,6 @@ HomepageMethod=CheckData
##\u6570\u636E\u5E93IP
#dataBaseIp=localhost
###\u6570\u636E\u5E93\u540D\u79F0
##dataBaseName=yd_record
###\u6570\u636E\u5E93\u5BC6\u7801
##dataBasePassword=docus702
#
##\u6570\u636E\u5E93IP
##dataBaseIp=10.36.116.108
###\u6570\u636E\u5E93\u540D\u79F0
#dataBaseName=emr_record
##\u6570\u636E\u5E93\u5BC6\u7801
#dataBasePassword=xjgs+docus911
@ -114,7 +109,7 @@ HomepageMethod=CheckData
#recallReason=\u533B\u9662\u9700\u8981\u8FD9\u4EFD\u6587\u6863
#HomepageDictionary=http://10.36.116.108:8080/WholeCheckInterface/services/HomepageDictionary?wsdl
#HomepageMethod=CheckData
#
##
#
#
#

@ -0,0 +1,14 @@
<?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.BatchExportMapper">
<select id="selectAll" resultType="com.emr.vo.ExportTaskVo">
select * from Export_Task
<where>1=1
<if test="taskState != null">
taskState=#{taskState}
</if>
</where>
</select>
</mapper>

@ -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>

@ -0,0 +1,22 @@
<?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.ExportZdAssortMapper">
<select id="getPdfPath" resultType="com.emr.vo.ExportPdfVo">
SELECT
a.PDF_PATH,
a.AssortID ,
e.assort_sort,
e.gj_assort_name as assortName
FROM
export_zd_assort e
INNER JOIN Archive_Detail a ON a.AssortID= e.assort_id
WHERE
a.MasterID= #{masterID}
AND e.export_flag='1'
ORDER BY e.assort_sort
</select>
<select id="selectAll" resultType="com.emr.vo.ExportZdAssortVo">
select * from export_zd_assort where export_flag='1'
</select>
</mapper>
Loading…
Cancel
Save