diff --git a/src/main/java/com/emr/controller/SessionContant.java b/src/main/java/com/emr/controller/SessionContant.java new file mode 100644 index 00000000..8fbb1359 --- /dev/null +++ b/src/main/java/com/emr/controller/SessionContant.java @@ -0,0 +1,30 @@ +package com.emr.controller; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * @author 曾文和 + * @description: XXX类 + * @createTime 2023/6/21 16:00 + */ +public class SessionContant { + + public static String setPdfUrl(String masterId, String imgStr, List urlList, HttpServletRequest request) { + String key = masterId + "_" + imgStr; + request.getSession().setAttribute(key,urlList); + return key; + } + + public static List getPdfUrl(String key, HttpServletRequest request) { + Object attribute = request.getSession().getAttribute(key); + if(null != attribute){ + List list = (List) attribute; + //删除缓存 + request.getSession().removeAttribute(key); + return list; + } + return null; + } +} diff --git a/src/main/java/com/emr/controller/inHospitalController.java b/src/main/java/com/emr/controller/inHospitalController.java index 1bb242eb..cc59ee5c 100644 --- a/src/main/java/com/emr/controller/inHospitalController.java +++ b/src/main/java/com/emr/controller/inHospitalController.java @@ -13,6 +13,7 @@ import com.emr.util.*; import com.itextpdf.text.pdf.PdfReader; import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; @@ -22,6 +23,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -338,65 +340,88 @@ public class inHospitalController { */ @ResponseBody @RequestMapping(value = "/getPdfToPdf") + public String getPdfToPdf(HttpServletResponse response, HttpServletRequest request, String imgStr, String masterId, String flag) throws Exception { + //组织分类id集合 + if(StringUtils.isNotBlank(imgStr)){ + String[] assortIds = StringUtils.split(imgStr, ","); + List srcFileList = archiveDetailService.getPdfUrlByMasterOrId(assortIds,masterId,flag,null); + if(!CollectionUtils.isEmpty(srcFileList)){ + //设置进缓存 + String key = SessionContant.setPdfUrl(masterId, imgStr, srcFileList, request); + return key; + } + } + return null; + } +/* + @ResponseBody + @RequestMapping(value = "/getPdfToPdf") public String getPdfToPdf(HttpServletResponse response, HttpServletRequest request, String imgStr, String masterId, String flag) throws Exception { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - String result = ""; - // 项目在容器中实际发布运行的根路径 - String realPath = request.getSession().getServletContext().getRealPath("/"); - //realPath = realPath.split("target")[0] - realPath = pictureUrl + "\\static\\img\\"; - //pdf名称 - String pdfFileName = String.valueOf(System.currentTimeMillis()); - //病案号文件夹 - if (masterId == "" && masterId == null) { - result = ""; - return result; - } - //判断文件夹是否存在 - File fileDic = new File(realPath + masterId + "\\"); - if (!fileDic.exists() && !fileDic.isDirectory()) { - fileDic.mkdirs(); - } - List zds = zd_assortService.selectByColm(new Zd_Assort()); //from db - //from args - //病案号/类别/id文件夹(图片路径下的子文件夹名称) - //生成pdf(图片路径,pdf生成路径,图片路径文件夹列表) - List imgList = new ArrayList(); - if (imgStr != "" && imgStr != null) { - String[] imgArr = imgStr.split(","); - if (imgArr.length > 0) { - for (int i = 0; i < imgArr.length; i++) { - imgList.add(imgArr[i]); + try { + String result = ""; + // 项目在容器中实际发布运行的根路径 + String realPath = request.getSession().getServletContext().getRealPath("/"); + //realPath = realPath.split("target")[0] + realPath = pictureUrl + "\\static\\img\\"; + //pdf名称 + String pdfFileName = String.valueOf(System.currentTimeMillis()); + //病案号文件夹 + if (masterId == "" && masterId == null) { + result = ""; + return result; + } + //判断文件夹是否存在 + File fileDic = new File(realPath + masterId + "\\"); + if (!fileDic.exists() && !fileDic.isDirectory()) { + fileDic.mkdirs(); + } + List zds = zd_assortService.selectByColm(new Zd_Assort()); //from db + //from args + //病案号/类别/id文件夹(图片路径下的子文件夹名称) + //生成pdf(图片路径,pdf生成路径,图片路径文件夹列表) + List imgList = new ArrayList(); + if (imgStr != "" && imgStr != null) { + String[] imgArr = imgStr.split(","); + if (imgArr.length > 0) { + for (int i = 0; i < imgArr.length; i++) { + imgList.add(imgArr[i]); + } } } - } - for (int i = zds.size() - 1; i >= 0; i--) { - String a = zds.get(i).getAssortId(); - if (imgList.indexOf(a) == -1) { - zds.remove(i); + for (int i = zds.size() - 1; i >= 0; i--) { + String a = zds.get(i).getAssortId(); + if (imgList.indexOf(a) == -1) { + zds.remove(i); + } } - } - ArrayList fileList = new ArrayList<>(); - for (int i = 0; i < zds.size(); i++) { - String asordID = zds.get(i).getAssortId(); - String pdfA = GeneratePDFFileByAssortID(masterId, asordID, realPath, flag); - if (pdfA == "" || pdfA.length() == 0) { - continue; + ArrayList fileList = new ArrayList<>(); + for (int i = 0; i < zds.size(); i++) { + String asordID = zds.get(i).getAssortId(); + String pdfA = GeneratePDFFileByAssortID(masterId, asordID, realPath, flag); + if (pdfA == "" || pdfA.length() == 0) { + continue; + } + fileList.add(pdfA); + } + if (fileList.size() == 0) { + return ""; } - fileList.add(pdfA); - } - if (fileList.size() == 0) { - return ""; - } - String pdfPath = autoPdfUrl.trim() + "/" + String.valueOf(System.currentTimeMillis()) + ".pdf"; - PDFHelper.Append(fileList, pdfPath); - //PrintToPdfUtil.mergePdfFiles(fileList, pdfPath); - return pdfPath; + String pdfPath = autoPdfUrl.trim() + "/" + String.valueOf(System.currentTimeMillis()) + ".pdf"; + + //PDFHelper.Append(fileList, pdfPath); + //PrintToPdfUtil.mergePdfFiles(fileList, pdfPath); + return "1233"; + } catch (Exception e) { + e.printStackTrace(); + } + return null; } +*/ /** * 根据病案号或类别或图片id获取图片列表,并生成PDF并返回pdf文件名 @@ -1283,6 +1308,35 @@ public class inHospitalController { // } // } + + /** + * @Description: pdfStreamHandeler方法是加载pdf + * @param: [request, response] + * @return: void + * @author 曾文和 + * @createTime 2023/6/21 15:46 + */ + + @RequestMapping(value = "/pdfStreamHandeler") + public void pdfStreamHandeler(HttpServletRequest request, HttpServletResponse response)throws Exception { + String filePath = request.getParameter("url"); + String[] list=filePath.split("titleName="); + String key =list[0].substring(0,list[0].length()-1); + //titleName为前端页面title显示的患者姓名,这里要去掉 + List filePaths = SessionContant.getPdfUrl(key, request); + if (null != filePaths && !filePaths.isEmpty()) { + try { + //合成PDF + Jpg2PdfUtil.mulFile2One(response, filePaths, null); + //清除session里的filePaths值 + request.removeAttribute(key); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } + } + } +/* @RequestMapping(value = "/pdfStreamHandeler") public void pdfStreamHandeler(HttpServletRequest request, HttpServletResponse response) { String filePath = request.getParameter("url"); @@ -1306,6 +1360,7 @@ public class inHospitalController { } catch (Exception e) { } } +*/ @RequestMapping("getImg2") diff --git a/src/main/java/com/emr/dao/Archive_DetailMapper.java b/src/main/java/com/emr/dao/Archive_DetailMapper.java index a1a22f9e..d8b31794 100644 --- a/src/main/java/com/emr/dao/Archive_DetailMapper.java +++ b/src/main/java/com/emr/dao/Archive_DetailMapper.java @@ -170,4 +170,8 @@ public interface Archive_DetailMapper { * @return */ List selectPdfPathMayError(Archive_Detail_Vo record); + + Integer selectChildByCloCount(@Param("mIds") String mIds); + + List getPdfUrlByMasterOrId(@Param("assortIds") String[] assortIds, @Param("masterId")String masterId, @Param("flag")String flag, @Param("fileIds")String fileIds); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/Archive_MasterMapper.java b/src/main/java/com/emr/dao/Archive_MasterMapper.java index 75055d9f..9b6dadf8 100644 --- a/src/main/java/com/emr/dao/Archive_MasterMapper.java +++ b/src/main/java/com/emr/dao/Archive_MasterMapper.java @@ -1,5 +1,6 @@ package com.emr.dao; +import com.emr.dto.Archive_MasterDto; import com.emr.entity.Archive_Master; import com.emr.entity.Archive_Master_Following; import com.emr.entity.Archive_Master_Vo; @@ -254,4 +255,6 @@ public interface Archive_MasterMapper { * @return */ Integer selectTime1(Archive_Master_Vo archiveMasterVo); + + List selectChildMasterId(String time); } \ No newline at end of file diff --git a/src/main/java/com/emr/dto/Archive_MasterDto.java b/src/main/java/com/emr/dto/Archive_MasterDto.java new file mode 100644 index 00000000..d4dae1c7 --- /dev/null +++ b/src/main/java/com/emr/dto/Archive_MasterDto.java @@ -0,0 +1,17 @@ +package com.emr.dto; + +import lombok.Data; + +/** + * @author 曾文和 + * @description: XXX类 + * @createTime 2023/6/21 14:11 + */ +@Data +public class Archive_MasterDto { + private String id; + + private String inpNo; + + private String admissionDateTime; +} diff --git a/src/main/java/com/emr/service/Archive_DetailService.java b/src/main/java/com/emr/service/Archive_DetailService.java index de8784e1..30d97b7b 100644 --- a/src/main/java/com/emr/service/Archive_DetailService.java +++ b/src/main/java/com/emr/service/Archive_DetailService.java @@ -133,6 +133,8 @@ public interface Archive_DetailService { List selectPdfPathMayError(Archive_Detail_Vo record); OffsetLimitPage selectPdfPathMayError(Archive_Detail_Vo record, Integer offset, Integer limit); + + List getPdfUrlByMasterOrId(String[] assortIds, String masterId, String flag, String fileIds); } diff --git a/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java b/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java index e1037c42..8c448a84 100644 --- a/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java @@ -8,6 +8,7 @@ package com.emr.service.ipml; import com.emr.dao.Archive_DetailMapper; import com.emr.dao.Archive_MasterMapper; +import com.emr.dto.Archive_MasterDto; import com.emr.entity.*; import com.emr.service.Archive_DetailService; import com.emr.util.Jpg2PdfUtil; @@ -46,7 +47,31 @@ public class Archive_DetailServiceImpl implements Archive_DetailService { @Override public Integer selectChildByClo(Archive_Detail_Vo record) { - return archiveDetailMapper.selectChildByClo(record); + //查询该主键的病案号和住院时间 + Archive_Master archiveMaster = archiveMasterMapper.selectById(record.getPatientId()); + //查询该住院时间的数据集合 + List list = archiveMasterMapper.selectChildMasterId(archiveMaster.getAdmissionDateTime()); + //定义是该患者的婴儿的masterId集合 + StringBuilder mIdStr = new StringBuilder(); + if(!CollectionUtils.isEmpty(list)){ + for (Archive_MasterDto dto : list){ + if(!dto.getId().equals(archiveMaster.getId()) && (dto.getInpNo().contains(archiveMaster.getInpNo() + "B") || dto.getInpNo().contains(archiveMaster.getInpNo() + "_B"))){ + if(StringUtils.isNotBlank(mIdStr)){ + mIdStr.append(","); + } + mIdStr.append("'").append(dto.getId()).append("'"); + } + } + } + if(StringUtils.isNotBlank(mIdStr)) { + try { + Integer count = archiveDetailMapper.selectChildByCloCount(mIdStr.toString()); + return count; + } catch (Exception e) { + e.printStackTrace(); + } + } + return 0; } @Override @@ -266,6 +291,11 @@ public class Archive_DetailServiceImpl implements Archive_DetailService { return null; } + @Override + public List getPdfUrlByMasterOrId(String[] assortIds, String masterId, String flag, String fileIds) { + return archiveDetailMapper.getPdfUrlByMasterOrId(assortIds,masterId,flag,fileIds); + } + } diff --git a/src/main/java/com/emr/util/Jpg2PdfUtil.java b/src/main/java/com/emr/util/Jpg2PdfUtil.java index 31b50b87..e447fd37 100644 --- a/src/main/java/com/emr/util/Jpg2PdfUtil.java +++ b/src/main/java/com/emr/util/Jpg2PdfUtil.java @@ -36,7 +36,7 @@ public class Jpg2PdfUtil { /** * 利用itext打开pdf文档 */ - private PdfReader check(String file) { + private static PdfReader check(String file) { if(StringUtils.isNotBlank(file)) { PdfReader pdfReader = null; try { @@ -72,7 +72,7 @@ public class Jpg2PdfUtil { } } - public void mulFile2One(HttpServletResponse response, List files, String waterMarkName) { + public static void mulFile2One(HttpServletResponse response, List files, String waterMarkName) { List list = new ArrayList<>(); //遍历删除,除去损坏,文件不存在,抛异常就是空白页 Iterator iterator = files.iterator(); @@ -94,11 +94,6 @@ public class Jpg2PdfUtil { document.open(); for (PdfReader reader : list) { bos.flush(); - //判断是否加水印 - if (StringUtils.isNotBlank(waterMarkName)) { - setWatermark(bos, reader, waterMarkName, null); - reader = new PdfReader(bos.toByteArray()); - } int n = reader.getNumberOfPages(); for (int j = 1; j <= n; j++) { document.newPage(); diff --git a/src/main/resources/mapper/Archive_DetailMapper.xml b/src/main/resources/mapper/Archive_DetailMapper.xml index cf56ae48..429dc1f4 100644 --- a/src/main/resources/mapper/Archive_DetailMapper.xml +++ b/src/main/resources/mapper/Archive_DetailMapper.xml @@ -139,9 +139,15 @@ - + + \ No newline at end of file diff --git a/src/main/resources/mapper/Archive_MasterMapper.xml b/src/main/resources/mapper/Archive_MasterMapper.xml index 9e4541ad..41ee2beb 100644 --- a/src/main/resources/mapper/Archive_MasterMapper.xml +++ b/src/main/resources/mapper/Archive_MasterMapper.xml @@ -2666,5 +2666,7 @@ - + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jspf/webSocket.jspf b/src/main/webapp/WEB-INF/jspf/webSocket.jspf index 29f9616b..a4caf542 100644 --- a/src/main/webapp/WEB-INF/jspf/webSocket.jspf +++ b/src/main/webapp/WEB-INF/jspf/webSocket.jspf @@ -23,7 +23,6 @@ //处理服务器发送来的数据 ws.onmessage = function (e) { - debugger var msg = e.data.split(strSplit); var a1 = msg[0]; if (msg.length == 5 && msg[2] == 2) { @@ -67,7 +66,6 @@ } function narnBorrow(type, title, text, noticeId) { - debugger naranja()[type]({ title: title, text: text,