From e54b90a930c00544b226dd699933f4866f9d05ce Mon Sep 17 00:00:00 2001
From: Godblessyou <824612544@qq.com>
Date: Wed, 11 Jun 2025 13:38:55 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=962.0=E6=A0=87=E5=87=86?=
=?UTF-8?q?=E7=89=88=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../bloodPurificationController.java | 150 +++++++++++++-
.../commomSearch/CommomSearchController.java | 15 +-
.../TemplateSearchController.java | 4 +-
.../BloodPurificationMapper.java | 3 +
.../java/com/emr/service/CommomService.java | 183 ++++++++++++------
.../resources/config/applicationContext.xml | 25 +++
src/main/resources/config/config.properties | 8 +-
src/main/resources/config/jdbc.properties | 8 +-
.../BloodPurificationMapper.xml | 38 ++++
.../tScanAssort/T_Scan_AssortMapper.xml | 2 +-
.../WEB-INF/dispatcherServlet-servlet.xml | 1 -
.../commomSearch/commomListqf.jsp | 34 ++--
.../recordManage/commomSearch/commomListqf.js | 39 +++-
14 files changed, 409 insertions(+), 103 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8f8d4ac..0988581 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
1.3.2
3.5.7
7.4.1.jre8
- 5.1.32
+ 8.0.33
1.1.22
1.2.5
2.15.0
diff --git a/src/main/java/com/emr/controller/bloodPurification/bloodPurificationController.java b/src/main/java/com/emr/controller/bloodPurification/bloodPurificationController.java
index eedc329..ea4eb0d 100644
--- a/src/main/java/com/emr/controller/bloodPurification/bloodPurificationController.java
+++ b/src/main/java/com/emr/controller/bloodPurification/bloodPurificationController.java
@@ -1,14 +1,12 @@
package com.emr.controller.bloodPurification;
import com.alibaba.fastjson.JSON;
+import com.emr.annotation.DBSource;
import com.emr.annotation.OptionalLog;
import com.emr.dao.CommomMapper;
import com.emr.dao.bloodPurification.BloodPurificationMapper;
import com.emr.dao.emrLog.Emr_LogMapper;
-import com.emr.entity.EmrBloodApplyInfo;
-import com.emr.entity.EmrBloodDialysisDoc;
-import com.emr.entity.Power_User;
-import com.emr.entity.ResultUtil;
+import com.emr.entity.*;
import com.emr.service.ImportExcel.ImportExcelEntity;
import com.emr.service.ImportExcel.ImportExcelUtil;
import com.emr.service.bloodPurification.BloodPurificationService;
@@ -27,15 +25,23 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.*;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.text.DecimalFormat;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
@@ -48,6 +54,10 @@ import java.util.stream.Collectors;
@Controller
@RequestMapping("bloodPurification/")
public class bloodPurificationController {
+
+ // 文件服务器地址
+ private static final String FILE_SERVER_URL = "http://192.168.2.22:9001";
+
@Autowired
private CommomMapper commomMapper;
@Autowired
@@ -154,6 +164,21 @@ public class bloodPurificationController {
return "recordManage/bloodPurification/inspectionRecordsSum";
}
+ /**
+ * 知情同意书查询页面
+ *
+ * @param model
+ * @param request
+ * @return
+ */
+ @RequiresPermissions("/bloodPurification/informedConsentForm")
+ @OptionalLog(module = "查看", methods = "知情同意书查询")
+ @RequestMapping("informedConsentForm")
+ public String informedConsentForm(Model model, HttpServletRequest request) {
+
+ return "recordManage/bloodPurification/informedConsentForm";
+ }
+
/**
* 流程修改、删除日志管理
* @return
@@ -605,6 +630,32 @@ public class bloodPurificationController {
}
}
+ /**
+ * 查询知情同意书
+ * @param page
+ * @param limit
+ * @param vmPatFormedDoc
+ * @param request
+ * @return
+ */
+ @DBSource("salve")
+ @RequestMapping("queryInformedConsentForm")
+ @ResponseBody
+ public String queryInformedConsentForm(Integer page, Integer limit, VmPatFormedDoc vmPatFormedDoc, HttpServletRequest request){
+ if(null != page && null != limit){
+ PageHelper.startPage(page, limit);
+ }
+ try{
+ List vmPatFormedDocList = bloodPurificationMapper.queryInformedConsentForm(vmPatFormedDoc);
+ PageInfo pageInfo = new PageInfo<>(vmPatFormedDocList);
+ return JSON.toJSONString(pageInfo);
+ }catch (Exception e){
+ ExceptionPrintUtil.printException(e);
+ e.printStackTrace();
+ return null;
+ }
+ }
+
/**
* 查询文书报表
* @param page
@@ -856,4 +907,89 @@ public class bloodPurificationController {
return ResultUtil.error("流程处理出错");
}
}
+
+
+ @GetMapping("/downloadSecureFile")
+ public void downloadSecureFile(@RequestParam String path, @RequestParam String filename, HttpServletResponse response) throws IOException {
+ // 处理路径编码问题
+ String baseUrl = FILE_SERVER_URL;
+
+ // 分割路径并逐个编码
+ String[] segments = path.split("/");
+ StringBuilder safePath = new StringBuilder();
+
+ for (String segment : segments) {
+ if (!segment.isEmpty()) {
+ safePath.append("/").append(URLEncoder.encode(segment, StandardCharsets.UTF_8.name()));
+ }
+ }
+
+ String fullPath = baseUrl + safePath;
+
+ // UNC 路径检查
+ if (path.startsWith("\\") || path.contains("\\")) {
+ response.sendError(HttpServletResponse.SC_BAD_REQUEST, "UNC 路径不支持,请使用 HTTP/SMB 访问远程文件");
+ return;
+ }
+
+ // 创建连接
+ URL url = new URL(fullPath);
+ URLConnection connection = url.openConnection();
+ connection.setConnectTimeout(10000);
+ connection.setReadTimeout(30000);
+
+ try (InputStream inputStream = connection.getInputStream()) {
+ response.setContentType("application/octet-stream");
+
+ // 提取文件名
+ String finalFilename = extractFileName(path);
+ if (!ObjectUtils.isEmpty(filename)) {
+ String fileExtension = "";
+ int dotIndex = finalFilename.lastIndexOf(".");
+ if (dotIndex > 0) {
+ fileExtension = finalFilename.substring(dotIndex);
+ }
+ if (filename.contains(".")) {
+ filename = filename.substring(0, filename.lastIndexOf("."));
+ }
+ finalFilename = filename + fileExtension;
+ }
+
+ String encodedFilename = URLEncoder.encode(finalFilename, "UTF-8");
+ response.setHeader(HttpHeaders.CONTENT_DISPOSITION,
+ "attachment; filename*=UTF-8''" + encodedFilename);
+
+ long contentLength = connection.getContentLengthLong();
+ if (contentLength > 0) {
+ response.setContentLengthLong(contentLength);
+ }
+
+ try (OutputStream out = response.getOutputStream()) {
+ byte[] buffer = new byte[10 * 1024];
+ int bytesRead;
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ out.write(buffer, 0, bytesRead);
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found or access denied");
+ }
+ }
+
+ /**
+ * 从路径中提取文件名,支持类似:
+ * /upload/2024/05/12/report.pdf => report.pdf
+ */
+ private String extractFileName(String path) {
+ // 兼容 / 和 \
+ int lastUnixSlash = path.lastIndexOf('/');
+ int lastWinSlash = path.lastIndexOf('\\');
+ int lastSlashIndex = Math.max(lastUnixSlash, lastWinSlash);
+
+ if (lastSlashIndex != -1 && lastSlashIndex < path.length() - 1) {
+ return path.substring(lastSlashIndex + 1);
+ }
+ return "file.dat";
+ }
}
diff --git a/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java b/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java
index 310bc7f..4942b3b 100644
--- a/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java
+++ b/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java
@@ -326,11 +326,7 @@ public class CommomSearchController {
}
}
-
-
-
-
-
+
/***
* 根据用户权限查询分段
* @param request
@@ -1166,6 +1162,7 @@ public class CommomSearchController {
@RequestMapping(value = "getRecordContentBlood")
@ResponseBody
public void getRecordContentBlood(String patientId, HttpServletRequest request, HttpServletResponse response) {
+ Map cacheMap = commomService.CACHE_MAP;
List commomTrees = archiveDetailMapper.selectPdfPathByPatient2(patientId);
Power_User user;
Object currentUser = request.getSession().getAttribute("CURRENT_USER");
@@ -1179,7 +1176,7 @@ public class CommomSearchController {
if (commomTrees.size() == 0) {
try {
String mapKey = user.getUserName() + "_" + patientId;
- List scanPages = (List) request.getSession().getAttribute(mapKey);
+ List scanPages = (List) cacheMap.get(mapKey);
if (!CollectionUtils.isEmpty(scanPages)) {
String pdfName = "档案管理PDF";
//根据图片路径转换pdf
@@ -1195,7 +1192,7 @@ public class CommomSearchController {
img2PdfUtil.imageToPdfUserEffective(response, scanPages, pdfName, emrPdfWaterSet);
}
//移除缓存
- request.removeAttribute(mapKey);
+ commomService.CACHE_MAP.clear();
}
} catch (Exception e) {
ExceptionPrintUtil.printException(e);
@@ -1204,14 +1201,14 @@ public class CommomSearchController {
} else {
String pdfWater = "";
String mapKey = user.getUserName() + "_" + patientId;
- List filePaths = (List) request.getSession().getAttribute(mapKey);
+ List filePaths = (List) cacheMap.get(mapKey);
if (!CollectionUtils.isEmpty(filePaths)) {
//根据图片路径转换pdf
EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1);
//定义第二文本水印 姓名 + 科室 + ip
Jpg2PdfUtil.mulFile2One2(response, filePaths, pdfWater,emrPdfWaterSet);
//移除缓存
- request.removeAttribute(mapKey);
+ commomService.CACHE_MAP.clear();
}
}
}
diff --git a/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java b/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java
index 167412b..90a625d 100644
--- a/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java
+++ b/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java
@@ -1702,7 +1702,7 @@ public class TemplateSearchController {
//批量添加打印记录
printOrDownLoadInfoService.SimpleInsert(scanPathVos, typeId, Short.valueOf("1"));
//调用湘雅附二病历复印打印状态同步接口
- //this.MedicalPrintSyncPrintStatusAction(patientIds , printDate);
+ this.MedicalPrintSyncPrintStatusAction(patientIds , printDate);
}
} catch (Exception e) {
ExceptionPrintUtil.printException(e);
@@ -1719,7 +1719,7 @@ public class TemplateSearchController {
JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance();
//创建客户端
Object[] objects;
- Client client = dcf.createClient("http://172.16.198.250:13023/dev/openapi/health");
+ Client client = dcf.createClient("http://172.16.198.250:13023/openapi/health");
//合作方密钥
String partnerKey = "53fd4f5ff132528e2e071baeeb3f99a2";
diff --git a/src/main/java/com/emr/dao/bloodPurification/BloodPurificationMapper.java b/src/main/java/com/emr/dao/bloodPurification/BloodPurificationMapper.java
index d57232f..4275da5 100644
--- a/src/main/java/com/emr/dao/bloodPurification/BloodPurificationMapper.java
+++ b/src/main/java/com/emr/dao/bloodPurification/BloodPurificationMapper.java
@@ -2,6 +2,7 @@ package com.emr.dao.bloodPurification;
import com.emr.entity.EmrBloodApplyInfo;
import com.emr.entity.EmrBloodDialysisDoc;
+import com.emr.entity.VmPatFormedDoc;
import com.emr.entity.emrLog.Emr_Log;
import java.util.List;
@@ -36,4 +37,6 @@ public interface BloodPurificationMapper{
List