diff --git a/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java b/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java index c6982c7..35d484a 100644 --- a/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java +++ b/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.emr.annotation.OptionalLog; import com.emr.controller.FormTokenFlagUtil; import com.emr.dao.CommomMapper; +import com.emr.dao.EmrComomSetMapper; import com.emr.dao.Emr_DictionaryMapper; import com.emr.dao.approve.Emr_Apply_ApproveMapper; import com.emr.dao.commomSearch.ScanPathMapper; @@ -12,10 +13,7 @@ import com.emr.dao.recordLock.Emr_LockMapper; import com.emr.dao.templateSearch.Emr_CustomizeMapper; import com.emr.dao.templateSearch.Emr_ModleMapper; import com.emr.dao.templateSearch.Emr_Modle_RelatedMapper; -import com.emr.entity.Emr_Dictionary; -import com.emr.entity.Emr_Fun_Group_Distribution; -import com.emr.entity.Power_User; -import com.emr.entity.ResultUtil; +import com.emr.entity.*; import com.emr.entity.approve.Emr_Apply_Approve; import com.emr.entity.emrPdfWaterSet.EmrPdfWaterSet; import com.emr.entity.recordLock.Emr_Lock; @@ -98,7 +96,10 @@ public class TemplateSearchController { private PrintOrDownLoadInfoService printOrDownLoadInfoService; @Autowired private EmrPdfWaterSetMapper pdfWaterSetMapper; - + @Autowired + private EmrComomSetMapper emrComomSetMapper; + @Autowired + private CommomService commomService; /** * @MethodName templateList * @Description: 跳转到自定义模板页面 @@ -897,6 +898,7 @@ public class TemplateSearchController { if (user.getRoleId() != 0) { distributions = funGroupDistributionService.selectUserIdsByTypeFlag("approve", user.getUserId()); } + EmrComomSet emrComomSet = emrComomSetMapper.selectByPrimaryKey(1); for (CommomVo commom : commomVos) { commom.setLockOper(lockOper); commom.setUnlockOper(unlockOper); @@ -904,7 +906,9 @@ public class TemplateSearchController { commom.setDownloadOper(downloadOper); commom.setEditOper(editOper); commom.setDelOper(delOper); - if (null != distributions && !distributions.isEmpty() || user.getRoleId() == 0) { + //判断是否是本科室 + boolean isDeptShow = judgeThisDeptPatient(commom,emrComomSet.getIsDeptShow(),user.getRemark()); + if (null != distributions && !distributions.isEmpty() || user.getRoleId() == 0 || isDeptShow) { commom.setIsShowDetail(1); } } @@ -923,6 +927,33 @@ public class TemplateSearchController { } } + /** + * @Description: judgeThisDeptPatient方法是判断是否是属于本科室免申请直接查看 + * @param: [commom] + * @return: boolean + * @author 曾文和 + * @createTime 2022/7/26 0:44 + */ + + private boolean judgeThisDeptPatient(CommomVo commom,Integer isDeptShow,String powerDepts) { + //查询是否需要属于本科室免申请直接查看 + if(null != isDeptShow && isDeptShow == 1){ + //获取出院科室 + String disDept = commom.getDisDept(); + if(StringUtils.isNoneBlank(powerDepts)){ + //分割管辖科室名称 + String[] powerDeptList = powerDepts.split(","); + for(String deptName : powerDeptList){ + if(StringUtils.isNoneBlank(disDept) && disDept.equals(deptName)){ + return true; + } + } + + } + } + return false; + } + /** * 南方医院无登录查询 * @param sql @@ -1271,7 +1302,8 @@ public class TemplateSearchController { //emrPdfWaterSet设置启用下载的状态 emrPdfWaterSet.setEffective(emrPdfWaterSet.getDownloadEffective()); emrPdfWaterSet.setIsImg(emrPdfWaterSet.getDownloadIsImg()); - img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet); + EmrPdfWaterSet emrPdfWaterSet1 = commomService.getEmrPdfWaterSet(emrPdfWaterSet); + img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet,emrPdfWaterSet1); } } catch (Exception e) { ExceptionPrintUtil.printException(e); diff --git a/src/main/java/com/emr/entity/EmrComomSet.java b/src/main/java/com/emr/entity/EmrComomSet.java index 35df66b..23fe6ef 100644 --- a/src/main/java/com/emr/entity/EmrComomSet.java +++ b/src/main/java/com/emr/entity/EmrComomSet.java @@ -13,6 +13,16 @@ public class EmrComomSet implements Serializable { private String newPicRoot; + private int isDeptShow; + + public int getIsDeptShow() { + return isDeptShow; + } + + public void setIsDeptShow(int isDeptShow) { + this.isDeptShow = isDeptShow; + } + private static final long serialVersionUID = 1L; public Integer getId() { diff --git a/src/main/java/com/emr/service/CommomService.java b/src/main/java/com/emr/service/CommomService.java index 27c09ee..bb632ef 100644 --- a/src/main/java/com/emr/service/CommomService.java +++ b/src/main/java/com/emr/service/CommomService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.emr.dao.CommomMapper; import com.emr.dao.emrPdfWaterSet.EmrPdfWaterSetMapper; import com.emr.entity.EmrComomSet; +import com.emr.entity.Power_User; import com.emr.entity.ResultUtil; import com.emr.entity.emrPdfWaterSet.EmrPdfWaterSet; import com.emr.entity.tScanAssort.T_Scan_Assort; @@ -18,10 +19,13 @@ import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; @@ -29,6 +33,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.InetAddress; +import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; @@ -160,6 +165,38 @@ public class CommomService { return null; } + public String getOperIp(){ + HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); + // 获取访问真实IP + String ipAddress = request.getHeader("x-forwarded-for"); + if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)){ + //根据网卡取本机配置的IP + InetAddress inet=null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + assert inet != null; + ipAddress= inet.getHostAddress(); + } + } + //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 + if(ipAddress.indexOf(",")>0){ + ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); + } + } + return ipAddress; + } //脐血库显示pdf public void showRecordContentBlood(String patientId, String scanPages, String sources, String flag, HttpServletResponse response) throws Exception { @@ -202,12 +239,42 @@ public class CommomService { if (!filePaths.isEmpty()) { //根据图片路径转换pdf EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1); - img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet); + //定义第二文本水印 姓名 + 科室 + ip + EmrPdfWaterSet emrPdfWaterSet1 = getEmrPdfWaterSet(emrPdfWaterSet); + img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet,emrPdfWaterSet1); } } } } + /** + * @Description: getEmrPdfWaterSet方法是定义第二文本水印 姓名 + 科室 + ip + * @param: [emrPdfWaterSet] + * @return: com.emr.entity.emrPdfWaterSet.EmrPdfWaterSet + * @author 曾文和 + * @createTime 2022/7/26 1:15 + */ + + public EmrPdfWaterSet getEmrPdfWaterSet(EmrPdfWaterSet emrPdfWaterSet) { + EmrPdfWaterSet emrPdfWaterSet1 = new EmrPdfWaterSet(); + BeanUtils.copyProperties(emrPdfWaterSet,emrPdfWaterSet1); + //定义第二水印文本 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + //获取reuqest + HttpServletRequest request = attributes.getRequest(); + Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); + String text = ""; + if(StringUtils.isNotBlank(user.getUserPosition())){ + text = user.getUserPosition(); + } + if(StringUtils.isNotBlank(user.getRemark())){ + text += " " + user.getRemark(); + } + text += " " + getOperIp(); + emrPdfWaterSet1.setText(text); + return emrPdfWaterSet1; + } + //南方医院显示图像 public void showRecordContentSouth(String patientId, String userName, String deptName, String scanPages, String sources, String flag, HttpServletResponse response) throws Exception { String pdfName = "档案管理PDF"; @@ -249,13 +316,9 @@ public class CommomService { if (!filePaths.isEmpty()) { //根据图片路径转换pdf EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1); - InetAddress netAddress = InetAddress.getLocalHost(); - String ip = null; - if (null != netAddress) { - ip = netAddress.getHostAddress(); - } - emrPdfWaterSet.setText(userName + " " + ip); - img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet); + //定义第二文本水印 姓名 + 科室 + ip + EmrPdfWaterSet emrPdfWaterSet1 = getEmrPdfWaterSet(emrPdfWaterSet); + img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet,emrPdfWaterSet1); } } } diff --git a/src/main/java/com/emr/service/emrPrintOrDownLoadInfo/PrintOrDownLoadInfoService.java b/src/main/java/com/emr/service/emrPrintOrDownLoadInfo/PrintOrDownLoadInfoService.java index 9af3e44..0deb03f 100644 --- a/src/main/java/com/emr/service/emrPrintOrDownLoadInfo/PrintOrDownLoadInfoService.java +++ b/src/main/java/com/emr/service/emrPrintOrDownLoadInfo/PrintOrDownLoadInfoService.java @@ -7,6 +7,7 @@ import com.emr.dao.emrPrintAndDownLoad.EmrPrintDownloadInfoMapper; import com.emr.entity.Power_User; import com.emr.entity.Zd_Assort; import com.emr.entity.emrPrintAndDownLoad.EmrPrintDownloadInfo; +import com.emr.service.CommomService; import com.emr.vo.EmrPrintOrDownLoadInfo.EmrPrintOrDownLoadInfoVo; import com.emr.vo.commomSearch.ScanPathVo; import org.apache.commons.lang3.StringUtils; @@ -31,6 +32,8 @@ public class PrintOrDownLoadInfoService { private EmrPrintDownloadInfoMapper printDownloadInfoMapper; @Autowired private Zd_AssortMapper assortMapper; + @Autowired + private CommomService commomService; /** * 批量插入 * */ @@ -80,7 +83,7 @@ public class PrintOrDownLoadInfoService { obj.setOperType(operType); obj.setCreater(user.getUserName()); obj.setCreateTime(fmt.format(new Date())); - obj.setIp(getOperIp()); + obj.setIp(commomService.getOperIp()); obj.setScanPage(JSON.toJSONString(map)); obj.setPatientId(patientId); batchInsertList.add(obj); @@ -92,38 +95,7 @@ public class PrintOrDownLoadInfoService { //获取操作人ip - private String getOperIp(){ - HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); - // 获取访问真实IP - String ipAddress = request.getHeader("x-forwarded-for"); - if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("Proxy-Client-IP"); - } - if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { - ipAddress = request.getHeader("WL-Proxy-Client-IP"); - } - if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { - ipAddress = request.getRemoteAddr(); - if("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)){ - //根据网卡取本机配置的IP - InetAddress inet=null; - try { - inet = InetAddress.getLocalHost(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - assert inet != null; - ipAddress= inet.getHostAddress(); - } - } - //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 - if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 - if(ipAddress.indexOf(",")>0){ - ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); - } - } - return ipAddress; - } + /** *按条件查询 * */ diff --git a/src/main/java/com/emr/util/img2PdfUtil.java b/src/main/java/com/emr/util/img2PdfUtil.java index d221f49..cbd4d28 100644 --- a/src/main/java/com/emr/util/img2PdfUtil.java +++ b/src/main/java/com/emr/util/img2PdfUtil.java @@ -42,7 +42,7 @@ public class img2PdfUtil { final private static float A4_weight = 595; //标准A4的宽 final private static float A4_height = 842; //标准A4的高 - public static void imageToPdf(HttpServletResponse response, List filePaths, String pdfName, EmrPdfWaterSet pdfWaterSet) { + public static void imageToPdf(HttpServletResponse response, List filePaths, String pdfName, EmrPdfWaterSet pdfWaterSet,EmrPdfWaterSet pdfWaterSet1) { Document document = new Document(PageSize.A4, 0, 0, 0, 0); //创建文档容器 ByteArrayOutputStream bos = new ByteArrayOutputStream(); //是否启用水印 @@ -66,7 +66,7 @@ public class img2PdfUtil { pdfWaterSet.getText(), pdfWaterSet.getTextX(), pdfWaterSet.getTextY(), pdfWaterSet.getTextColor(), pdfWaterSet.getTextSize(), pdfWaterSet.getTextRotation(), pdfWaterSet.getEffective(), pdfWaterSet.getIsImg(), pdfWaterSet.getImgFile(), pdfWaterSet.getImgWidth(), - pdfWaterSet.getImgHeight(), pdfWaterSet.getImgX(), pdfWaterSet.getImgY()); + pdfWaterSet.getImgHeight(), pdfWaterSet.getImgX(), pdfWaterSet.getImgY(),pdfWaterSet1.getText()); } } catch (Exception e) { ExceptionPrintUtil.printException(e); @@ -366,12 +366,135 @@ public class img2PdfUtil { // 中间水印 content.showTextAligned(Element.ALIGN_LEFT, text, textX, textY, textRotation); // 底部水印 - /*for (int k = 0; k < text.length(); k++) { - // 距离底边的距离 - content.setTextRise(10); - // 将char转成字符串 - content.showText(String.valueOf(text.charAt(k))); - }*/ + content.endText(); + //第二水印 + content.beginText(); + //16进制颜色转color + content.setColorFill(color); + // 设置字体及字号 + content.setFontAndSize(font, textSize); + // 设置起始位置 + content.setTextMatrix(textX, textY); + // 中间水印 + content.showTextAligned(Element.ALIGN_LEFT, text, textX, textY, textRotation); + // 底部水印 + content.endText(); + } + } + } catch (IOException | DocumentException e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } finally { + if (null != stamper) { + try { + stamper.close(); + } catch (DocumentException | IOException e) { + e.printStackTrace(); + } + } + if (null != reader) { + reader.close(); + } + } + } + public static void addWaterMark(ByteArrayOutputStream bos, HttpServletResponse response, int upOrUnder, float transparent, String text, int textX, int textY, + String textColor, int textSize, int textRotation, Short effective, Short isImg, + String imgFile, int imgWidth, int imgHeight, int imgX, int imgY,String text1) { + PdfReader reader = null; + PdfStamper stamper = null; + try { + reader = new PdfReader(bos.toByteArray()); + // 加完水印的文件 + if (null != response) { + stamper = new PdfStamper(reader, response.getOutputStream()); + } else { + stamper = new PdfStamper(reader, bos); + } + // 设置字体 + BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); + // PDF总页数 + int total = reader.getNumberOfPages() + 1; + // 循环对每页插入水印 + PdfContentByte content; + PdfGState gs = new PdfGState(); + for (int i = 1; i < total; i++) { + //upOrUnder = 1为在文本之上 + if (upOrUnder == 1) { + // 水印在之前文本之上 + content = stamper.getOverContent(i); + } else { + // 水印在文本之下 + content = stamper.getUnderContent(i); + } + //设置填充字体不透明度为0.2f + gs.setFillOpacity(transparent); + content.setGState(gs); + // 图片水印 + if (null != isImg && isImg == 1) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String tomcatPath = request.getSession().getServletContext().getRealPath("/"); + String imgStr = tomcatPath + "static\\pdfWaterSet\\upload\\" + imgFile; + com.lowagie.text.Image image = null; + if (StringUtils.isNotBlank(imgStr) && new File(imgStr).isFile()) { + image = com.lowagie.text.Image.getInstance(imgStr); + //位置 + image.setAbsolutePosition(imgX, imgY); + // 设置图片的显示大小 + image.scaleToFit(imgWidth, imgHeight); + content.addImage(image); + } + } + // 文字水印 + if (effective == 1 && StringUtils.isNotBlank(text)) { + content.beginText(); + //16进制颜色转color + Color color = toColorFromString(textColor); + content.setColorFill(color); + // 设置字体及字号 + content.setFontAndSize(font, textSize); + // 设置起始位置 + content.setTextMatrix(textX, textY); + // 中间水印 + content.showTextAligned(Element.ALIGN_LEFT, text, textX, textY, textRotation); + // 底部水印 + content.endText(); + //第二水印 + content.beginText(); + //16进制颜色转color + content.setColorFill(color); + // 设置字体及字号 + content.setFontAndSize(font, textSize); + // 设置起始位置 + content.setTextMatrix(textX, textY); + // 中间水印 + content.showTextAligned(Element.ALIGN_LEFT, text, textX, textY, textRotation); + // 底部水印 + content.endText(); + } + if(StringUtils.isNotBlank(text1)){ + content.beginText(); + //16进制颜色转color + Color color = toColorFromString(textColor); + content.setColorFill(color); + // 设置字体及字号 + content.setFontAndSize(font, textSize); + // 设置起始位置 + content.setTextMatrix(textX, textY); + // 中间水印 + content.showTextAligned(Element.ALIGN_LEFT, text1, textX, textY - 100, textRotation); + // 底部水印 + content.endText(); + //第二水印 + content.beginText(); + //16进制颜色转color + content.setColorFill(color); + // 设置字体及字号 + content.setFontAndSize(font, textSize); + // 设置起始位置 + content.setTextMatrix(textX, textY); + // 中间水印 + content.showTextAligned(Element.ALIGN_LEFT, text, textX, textY, textRotation); + // 底部水印 content.endText(); } } diff --git a/src/main/resources/mapper/EmrComomSetMapper.xml b/src/main/resources/mapper/EmrComomSetMapper.xml index 3af25ed..0321a1c 100644 --- a/src/main/resources/mapper/EmrComomSetMapper.xml +++ b/src/main/resources/mapper/EmrComomSetMapper.xml @@ -5,11 +5,12 @@ + - id, times, defaultDay, maxDay,new_pic_root + id, times, defaultDay, maxDay,new_pic_root,is_dept_show