diff --git a/src/main/java/com/emr/controller/FontController.java b/src/main/java/com/emr/controller/FontController.java new file mode 100644 index 0000000..2b14770 --- /dev/null +++ b/src/main/java/com/emr/controller/FontController.java @@ -0,0 +1,356 @@ +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.Zd_AssortService; +import com.emr.util.ExceptionPrintUtil; +import com.emr.util.Msg; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +/** + * @author zwh + * */ +@Controller +@RequestMapping("font/") +public class FontController { + @Value("${pdfWater}") + private String pdfWater; + @Value("${allAddortIds}") + private String allAddortIds; + @Value("${POWER_URLHEAD}") + private String powerUrlHead; + @Autowired + private Archive_DetailService archiveDetailService; + @Autowired + private Archive_MasterService archiveMasterService; + @Autowired + private Emr_DictionaryMapper dictionaryMapper; + @Autowired + private Zd_AssortService assortService; + + /***************************提供第三方按多个分段id和记账号查询病历pdf***********************************/ + /** + * 提供第三方按多个分段id和记账号查询病历pdf + * */ + @RequestMapping("showRecordByPatientId") + public String showRecordByPatientId(String assortIds, String patientId, Model model){ + if(StringUtils.isBlank(assortIds)){ + return retrunErrorPage(model,"病案分类Id不能为空!"); + } + if(StringUtils.isBlank(patientId)){ + return retrunErrorPage(model,"记账号不能为空!"); + } + List list = new ArrayList<>(); + //判断工号是否存在 + try { + /* String checkUserName = checkUserName(userName); + if(StringUtils.isNotBlank(checkUserName)){ + return retrunErrorPage(model,checkUserName); + }*/ + //判断分类id是否存在,协商assortIds = "00000000"为查询全部 + if(!allAddortIds.equals(assortIds)) { + String checkAssortIds = checkAssortIds(assortIds); + if (StringUtils.isNotBlank(checkAssortIds)) { + return retrunErrorPage(model, checkAssortIds); + } + } + //判断记账号是否存在 + Archive_Master master = new Archive_Master(); + master.setPatientId(patientId); + list = archiveMasterService.selectByObject(master); + if(null == list || list.isEmpty()){ + return retrunErrorPage(model,"记账号不存在!"); + } + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } + model.addAttribute("patientId",list.get(0).getId()); + model.addAttribute("accountNumber",list.get(0).getPatientId()); + model.addAttribute("assortIds",assortIds); + return "font/showRecord"; + } + + /** + * 返回错误页面 + * */ + private String retrunErrorPage(Model model,String errorMsg){ + model.addAttribute("errorMsg",errorMsg); + return "font/error"; + } + + /** + * 判断分类id是否存在 + * */ + private String checkAssortIds(String assortIds){ + Zd_Assort assort = new Zd_Assort(); + assort.setPrintFlag("0"); + List assortList = null; + try { + assortList = assortService.selectAll(assort); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } + if(null != assortList && !assortList.isEmpty()){ + String[] split = assortIds.split(","); + for (String s : split) { + //定义分类存在 + boolean exist = false; + if (StringUtils.isNotBlank(s)) { + for (Zd_Assort assort1 : assortList) { + if (s.equals(assort1.getAssortId())) { + exist = true; + break; + } + } + } + if (!exist) { + return "病案分类Id有误!"; + } + } + }else{ + return "病案分类Id有误!"; + } + return null; + } + + /** + * 根据主键查询病案详情 + * @param masterId + * @return + */ + @ResponseBody + @RequestMapping(value = "/getRecord") + public String getPdfToPdf(String masterId){ + try { + Archive_Master archiveMaster = archiveMasterService.selectById(masterId); + //转换科室数据字典 + if(StringUtils.isNotBlank(archiveMaster.getDeptName())){ + Emr_Dictionary dictionary = new Emr_Dictionary(); + dictionary.setCode(archiveMaster.getDeptName()); + dictionary.setTypecode("dept_code"); + List dictionaries = dictionaryMapper.dicByTypeCode(dictionary); + if(null != dictionaries && !dictionaries.isEmpty()){ + archiveMaster.setDeptName(dictionaries.get(0).getName()); + } + //判断出院日期 + String dischargeDateTime = archiveMaster.getDischargeDateTime(); + if(StringUtils.isNotBlank(dischargeDateTime)){ + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + String time = fmt.format(fmt.parse(dischargeDateTime)); + if("1801-02-03".equals(time)){ + archiveMaster.setDischargeDateTime(null); + } + } + } + return JSON.toJSONString(archiveMaster); + } catch (ParseException e) { + ExceptionPrintUtil.printException(e); + //e.printStackTrace(); + return null; + } + } + + /** + * 跳转到showRecordIframe页面 + * */ + @RequestMapping("showRecordIframe") + public String showRecordIframe(){ + return "font/showRecordIframe"; + } + + /** + * 根据master表的记账号和分类id集合组织分类树 + * @return + * @throws Exception + */ + @ResponseBody + @RequestMapping(value = "/getRecordTypeTree") + public String getRecordTypeTree(String patientId,String assortIds){ + List treeList = new ArrayList<>(); + if(StringUtils.isNotBlank(patientId) && StringUtils.isNotBlank(assortIds)){ + List list = new ArrayList<>(); + //assortIds等于协商的全查的分类id,全查 + try { + if(allAddortIds.equals(assortIds)){ + list = archiveDetailService.selectTypeTreeByPatientIdAndAssortIds(patientId, null); + }else{ + //否则按条件查 + //分类id分别以单引号隔开 + StringBuilder assortIdStr = new StringBuilder(); + String[] split = assortIds.split(","); + for (String s : split) { + assortIdStr.append("'").append(s).append("',"); + } + //去掉最后一个逗号 + assortIdStr = new StringBuilder(assortIdStr.substring(0, assortIdStr.length() - 1)); + list = archiveDetailService.selectTypeTreeByPatientIdAndAssortIds(patientId, assortIdStr.toString()); + } + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + } + if(null != list && !list.isEmpty()){ + Set assortList = new LinkedHashSet<>(); + //抽取首次病程记录 + String strTemp = "首次病程"; + String assortId = "AFB9FBE656D7492C80AEDE6E685A851A"; + //定义护理记录里的首次护理记录排前头 + String nurseTemp = "首次护理"; + String nurseAssortId = "C70E8C427A3648B79BE80798C08F4D12"; + Archive_Detail detailTemp = new Archive_Detail(); + Archive_Detail nurseDetailVoTemp = new Archive_Detail(); + //分类去重 + for(Archive_Detail detail : list){ + assortList.add(detail.getSubassort()); + //获取title + String title = detail.getTitle(); + if(StringUtils.isNotBlank(title) && detail.getTitle().contains(strTemp)){ + detailTemp = detail; + } + if(StringUtils.isNotBlank(title) && detail.getTitle().contains(nurseTemp)){ + nurseDetailVoTemp = detail; + } + } + //组织树 + int id = 1; + //定义第一层的id为第二层父id + int oneParentId = 0; + //定义第二层的id为第三层父id + int twoParentId = 0; + AssortTypeTree tree = new AssortTypeTree(); + //第一层,根目录全部影像资料 + tree.setId(id); + tree.setParentId(0); + tree.setName("全部影像资料"); + tree.setChecked("true"); + treeList.add(tree); + oneParentId = id; + id++; + for(String assortName : assortList){ + AssortTypeTree tree1 = new AssortTypeTree(); + //第二层,分类名称 + tree1.setId(id); + tree1.setParentId(oneParentId); + twoParentId = id; + id++; + //定义该类的数量 + int count = 0; + //定义是否添加了首次病程 + boolean flag = false; + boolean nurseflag = false; + for(Archive_Detail detail : list){ + if(StringUtils.isNotBlank(detail.getSubassort()) && assortName.equals(detail.getSubassort())){ + String assortid = detail.getAssortid(); + if(StringUtils.isNotBlank(assortid) && assortid.equals(assortId)){ + //是病程记录 + if(!flag && StringUtils.isNotBlank(detailTemp.getTitle())){ + AssortTypeTree tree2 = new AssortTypeTree(); + //第三层,资料名称 + count++; + tree2.setId(id); + tree2.setParentId(twoParentId); + tree2.setName(detailTemp.getTitle()); + tree2.setSelfId(detailTemp.getId()); + tree2.setChecked("true"); + treeList.add(tree2); + id++; + flag = true; + } + } + if(StringUtils.isNotBlank(assortid) && assortid.equals(nurseAssortId)){ + //是护理记录 + if(!nurseflag && StringUtils.isNotBlank(nurseDetailVoTemp.getTitle())){ + AssortTypeTree tree2 = new AssortTypeTree(); + //第三层,资料名称 + count++; + tree2.setId(id); + tree2.setParentId(twoParentId); + tree2.setName(nurseDetailVoTemp.getTitle()); + tree2.setSelfId(nurseDetailVoTemp.getId()); + tree2.setChecked("true"); + treeList.add(tree2); + id++; + nurseflag = true; + } + } + if(!detail.equals(detailTemp) && !detail.equals(nurseDetailVoTemp)) { + AssortTypeTree tree2 = new AssortTypeTree(); + //第三层,资料名称 + count++; + tree2.setId(id); + tree2.setParentId(twoParentId); + tree2.setName(detail.getTitle()); + tree2.setSelfId(detail.getId()); + tree2.setChecked("true"); + treeList.add(tree2); + id++; + } + } + } + tree1.setName(assortName + "("+count+")"); + tree1.setChecked("true"); + treeList.add(tree1); + } + } + } + return JSON.toJSONString(treeList); + } + + /** + * 根据病案号或类别或图片id获取图片列表,并生成PDF并返回pdf文件名 + * @param response + * @param detailIds + * @return + * @throws Exception + */ + @ResponseBody + @RequestMapping(value = "/getPdfToPdf",method = RequestMethod.POST) + public Msg getPdfToPdf(HttpServletResponse response, String detailIds, HttpSession session){ + try { + Archive_Detail detail = new Archive_Detail(); + if(StringUtils.isNotBlank(detailIds)){ + detail.setTitle(detailIds); + archiveDetailService.selectByIdStrFont(response,session,detail); + }else{ + //存至session + session.setAttribute("showRecord",null); + } + return Msg.success(); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + return Msg.fail("查看出错了,请联系系统管理员"); + //e.printStackTrace(); + } + } + + @ResponseBody + @RequestMapping(value = "showPdf") + public void showPdf(HttpServletResponse response,HttpSession session){ + try { + archiveDetailService.showPdf(response,session,pdfWater); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + } + } +} diff --git a/src/main/java/com/emr/dao/Archive_DetailMapper.java b/src/main/java/com/emr/dao/Archive_DetailMapper.java index ed712f4..ee24438 100644 --- a/src/main/java/com/emr/dao/Archive_DetailMapper.java +++ b/src/main/java/com/emr/dao/Archive_DetailMapper.java @@ -2,6 +2,7 @@ package com.emr.dao; import com.emr.entity.Archive_Detail; import com.emr.entity.Archive_Detail_Vo; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -32,4 +33,5 @@ public interface Archive_DetailMapper { List selectByCol2(Archive_Detail record); + List selectTypeTreeByPatientIdAndAssortIds(@Param("patientId")String patientId, @Param("assortIds")String assortIds); } \ 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 3bd7e3a..184f8d1 100644 --- a/src/main/java/com/emr/dao/Archive_MasterMapper.java +++ b/src/main/java/com/emr/dao/Archive_MasterMapper.java @@ -49,4 +49,9 @@ public interface Archive_MasterMapper { //封存日志 List selectByFollowinglog(Archive_Master_Vo record); + + /** + * 查询病案是否存在 + * */ + List selectByObject(Archive_Master master); } \ No newline at end of file diff --git a/src/main/java/com/emr/dao/Zd_AssortMapper.java b/src/main/java/com/emr/dao/Zd_AssortMapper.java index 3b60525..048625d 100644 --- a/src/main/java/com/emr/dao/Zd_AssortMapper.java +++ b/src/main/java/com/emr/dao/Zd_AssortMapper.java @@ -1,6 +1,7 @@ package com.emr.dao; import com.emr.entity.Zd_Assort; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -10,4 +11,9 @@ public interface Zd_AssortMapper { int insertSelective(Zd_Assort record); List selectByColm(Zd_Assort record); + + /** + * 全查 + * */ + List selectAll(@Param("record") Zd_Assort record); } \ No newline at end of file diff --git a/src/main/java/com/emr/entity/AssortTypeTree.java b/src/main/java/com/emr/entity/AssortTypeTree.java new file mode 100644 index 0000000..d027051 --- /dev/null +++ b/src/main/java/com/emr/entity/AssortTypeTree.java @@ -0,0 +1,65 @@ +package com.emr.entity; + +/** + * @ProjectName: + * @Description: + * @Param 传输参数 + * @Return + * @Author: 曾文和 + * @CreateDate: 2020/4/22 17:40 + * @UpdateUser: 曾文和 + * @UpdateDate: 2020/4/22 17:40 + * @UpdateRemark: 更新说明 + * @Version: 1.0 + */ +public class AssortTypeTree { + private Integer id; + + private Integer parentId; + + private String name; + + private String selfId; + + private String checked; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getParentId() { + return parentId; + } + + public void setParentId(Integer parentId) { + this.parentId = parentId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSelfId() { + return selfId; + } + + public void setSelfId(String selfId) { + this.selfId = selfId; + } + + public String getChecked() { + return checked; + } + + public void setChecked(String checked) { + this.checked = checked; + } +} diff --git a/src/main/java/com/emr/service/Archive_DetailService.java b/src/main/java/com/emr/service/Archive_DetailService.java index f300c32..5704b60 100644 --- a/src/main/java/com/emr/service/Archive_DetailService.java +++ b/src/main/java/com/emr/service/Archive_DetailService.java @@ -9,7 +9,10 @@ package com.emr.service; import com.emr.entity.Archive_Detail; import com.emr.entity.Archive_Detail_Vo; import com.emr.entity.OffsetLimitPage; +import org.apache.ibatis.annotations.Param; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import java.util.List; public interface Archive_DetailService { @@ -84,6 +87,14 @@ public interface Archive_DetailService { List selectByIdStr(Archive_Detail record); List selectByCol2(Archive_Detail record); + + List selectTypeTreeByPatientIdAndAssortIds(@Param("patientId")String patientId, @Param("assortIds")String assortIds); + + void selectByIdStrFont(HttpServletResponse response, HttpSession session, Archive_Detail detail); + + List mulFile2OneById(HttpServletResponse response,List arList); + + void showPdf(HttpServletResponse response, HttpSession session, String pdfWater); } diff --git a/src/main/java/com/emr/service/Archive_MasterService.java b/src/main/java/com/emr/service/Archive_MasterService.java index bfe6b90..8c35148 100644 --- a/src/main/java/com/emr/service/Archive_MasterService.java +++ b/src/main/java/com/emr/service/Archive_MasterService.java @@ -198,6 +198,11 @@ public interface Archive_MasterService { //封存日志 OffsetLimitPage selectByFollowinglog(Archive_Master_Vo record, Integer offset, Integer limit); + + /** + * 查询病案是否存在 + * */ + List selectByObject(Archive_Master master); } diff --git a/src/main/java/com/emr/service/Zd_AssortService.java b/src/main/java/com/emr/service/Zd_AssortService.java index 22abe15..1579d95 100644 --- a/src/main/java/com/emr/service/Zd_AssortService.java +++ b/src/main/java/com/emr/service/Zd_AssortService.java @@ -4,9 +4,15 @@ import com.emr.entity.Emr_Log; import com.emr.entity.Emr_Log_Vo; import com.emr.entity.OffsetLimitPage; import com.emr.entity.Zd_Assort; +import org.apache.ibatis.annotations.Param; import java.util.List; public interface Zd_AssortService { List selectByColm(Zd_Assort record); + + /** + * 全查 + * */ + List selectAll(@Param("record") Zd_Assort record); } 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 2c1b43c..973a62f 100644 --- a/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_DetailServiceImpl.java @@ -12,11 +12,17 @@ import com.emr.entity.Archive_Detail_Vo; import com.emr.entity.Emr_Fault_Vo; import com.emr.entity.OffsetLimitPage; import com.emr.service.Archive_DetailService; +import com.emr.util.Jpg2PdfUtil; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.util.ArrayList; import java.util.List; @Service @@ -83,7 +89,81 @@ public class Archive_DetailServiceImpl implements Archive_DetailService { return archiveDetailMapper.selectByCol2(record); } + @Override + public List selectTypeTreeByPatientIdAndAssortIds(String patientId, String assortIds) { + return archiveDetailMapper.selectTypeTreeByPatientIdAndAssortIds(patientId,assortIds); + } + + @Override + public void selectByIdStrFont(HttpServletResponse response, HttpSession session, Archive_Detail detail) { + List arList = archiveDetailMapper.selectByIdStr(detail); + List pdfList = mulFile2OneById(response, arList); + //存至session + session.setAttribute("showRecord",pdfList); + } + /** + * 封装合成pdf方法 + * @param response + * @param arList + */ + @Override + public List mulFile2OneById(HttpServletResponse response,List arList) { + List pdfList = new ArrayList<>(); + if (arList != null && !arList.isEmpty()) { + //TODO 抽取首次病程记录 + String strTemp = "首次病程"; + String assortId = "AFB9FBE656D7492C80AEDE6E685A851A"; + //定义护理记录里的首次护理记录排前头 + String nurseTemp = "首次护理"; + String nurseAssortId = "C70E8C427A3648B79BE80798C08F4D12"; + if(!CollectionUtils.isEmpty(arList)) { + String strPath = ""; + String nursePath = ""; + for (int i = 0; i < arList.size(); i++) { + String assortid = arList.get(i).getAssortid(); + if(StringUtils.isNotBlank(assortid) && assortid.equals(assortId) && arList.get(i).getTitle().contains(strTemp)){ + strPath = arList.get(i).getPdfPath(); + } + if(StringUtils.isNotBlank(assortid) && assortid.equals(nurseAssortId) && arList.get(i).getTitle().contains(nurseTemp)){ + nursePath = arList.get(i).getPdfPath(); + } + } + //定义是否添加首次病程 + boolean flag = false; + boolean nurseFlag = false; + for (Archive_Detail detail : arList) { + String str = detail.getPdfPath(); + if (StringUtils.isNoneBlank(str)) { + //病程分类先添加首次病程 + if (detail.getAssortid().equals(assortId) && !flag && StringUtils.isNotBlank(strPath)) { + pdfList.add(strPath); + flag = true; + } + //护理记录单先添加首次护理 + if (detail.getAssortid().equals(nurseAssortId) && !nurseFlag && StringUtils.isNotBlank(nursePath)) { + pdfList.add(nursePath); + nurseFlag = true; + } + if(!detail.getPdfPath().equals(strPath) && !detail.getPdfPath().equals(nursePath)){ + pdfList.add(str); + } + } + } + } + } + return pdfList; + } + @Override + public void showPdf(HttpServletResponse response, HttpSession session, String pdfWater) { + List pdfList = (List)session.getAttribute("showRecord"); + if(!CollectionUtils.isEmpty(pdfList)) { + Jpg2PdfUtil jpg2PdfUtil = Jpg2PdfUtil.getInstance(); + jpg2PdfUtil.mulFile2One(response, pdfList, pdfWater); + } + //删除缓存` ` ` + session.removeAttribute("showRecord"); + } } diff --git a/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java b/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java index 03715de..5b5afea 100644 --- a/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Archive_MasterServiceImpl.java @@ -357,6 +357,11 @@ public class Archive_MasterServiceImpl implements Archive_MasterService { return new OffsetLimitPage((Page) list); } + + @Override + public List selectByObject(Archive_Master master) { + return archiveMasterMapper.selectByObject(master); + } } diff --git a/src/main/java/com/emr/service/ipml/Zd_AssortServiceImpl.java b/src/main/java/com/emr/service/ipml/Zd_AssortServiceImpl.java index 437af19..19f2849 100644 --- a/src/main/java/com/emr/service/ipml/Zd_AssortServiceImpl.java +++ b/src/main/java/com/emr/service/ipml/Zd_AssortServiceImpl.java @@ -32,6 +32,11 @@ public class Zd_AssortServiceImpl implements Zd_AssortService { public List selectByColm(Zd_Assort record) { return zdAssortMapper.selectByColm(record); } + + @Override + public List selectAll(Zd_Assort record) { + return zdAssortMapper.selectAll(record); + } } diff --git a/src/main/java/com/emr/util/ExceptionPrintUtil.java b/src/main/java/com/emr/util/ExceptionPrintUtil.java new file mode 100644 index 0000000..d1003b3 --- /dev/null +++ b/src/main/java/com/emr/util/ExceptionPrintUtil.java @@ -0,0 +1,36 @@ +package com.emr.util; + +import org.apache.log4j.Logger; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; + +/** + * @ProjectName: + * @Description: + * @Param 传输参数 + * @Return + * @Author: 曾文和 + * @CreateDate: 2020/8/4 14:18 + * @UpdateUser: 曾文和 + * @UpdateDate: 2020/8/4 14:18 + * @UpdateRemark: 更新说明 + * @Version: 1.0 + */ +public class ExceptionPrintUtil { + private static Logger log = Logger.getLogger("errorMsg"); + public static void printException(Exception e){ + //方法名 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + log.error(exception); + try { + baos.flush(); + baos.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } +} diff --git a/src/main/java/com/emr/util/Jpg2PdfUtil.java b/src/main/java/com/emr/util/Jpg2PdfUtil.java new file mode 100644 index 0000000..31b50b8 --- /dev/null +++ b/src/main/java/com/emr/util/Jpg2PdfUtil.java @@ -0,0 +1,187 @@ +package com.emr.util; + +import com.lowagie.text.Document; +import com.lowagie.text.DocumentException; +import com.lowagie.text.Element; +import com.lowagie.text.Image; +import com.lowagie.text.pdf.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.util.CollectionUtils; + +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +/** + * @ProjectName: + * @Description: + * @Param 传输参数 + * @Return + * @Author: 曾文和 + * @CreateDate: 2019/6/6 9:07 + * @UpdateUser: 曾文和 + * @UpdateDate: 2019/6/6 9:07 + * @UpdateRemark: 更新说明 + * @Version: 1.0 + */ +public class Jpg2PdfUtil { + private static Logger log = Logger.getLogger("myMsg"); + /** + * 利用itext打开pdf文档 + */ + private PdfReader check(String file) { + if(StringUtils.isNotBlank(file)) { + PdfReader pdfReader = null; + try { + pdfReader = new PdfReader(file); + if (pdfReader.getNumberOfPages() != 0) { + return pdfReader; + } + } catch (Exception e) { + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String logStr = "'"+ file + "'"+"文件损坏或不存在"; + log.info(logStr); + System.out.println(fmt.format(new Date()) + ":" + logStr); + } finally { + if (null != pdfReader) { + pdfReader.close(); + } + } + } + return null; + } + + private Jpg2PdfUtil(){}; + + public static Jpg2PdfUtil getInstance(){ + return ContainerHolder.HOLDER.jpg2PdfUtil; + } + + private enum ContainerHolder{ + HOLDER; + private Jpg2PdfUtil jpg2PdfUtil; + ContainerHolder(){ + jpg2PdfUtil = new Jpg2PdfUtil(); + } + } + + public void mulFile2One(HttpServletResponse response, List files, String waterMarkName) { + List list = new ArrayList<>(); + //遍历删除,除去损坏,文件不存在,抛异常就是空白页 + Iterator iterator = files.iterator(); + while (iterator.hasNext()) { + PdfReader check = check(iterator.next()); + if(null != check){ + list.add(check); + } + } + if (!CollectionUtils.isEmpty(list)) { + // pdf合并工具类 + Document document = null; + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PdfCopy copy = null; + try { + response.reset(); + document = new Document(list.get(0).getPageSize(1)); + copy = new PdfCopy(document, response.getOutputStream()); + 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(); + PdfImportedPage page = null; + if (StringUtils.isNotBlank(waterMarkName)) { + page = copy.getImportedPage(reader, j); + } else { + page = copy.getImportedPage(reader, j); + } + copy.addPage(page); + } + reader.close(); + } + } catch (Exception e) { + //e.printStackTrace(); + } finally { + if (null != copy) { + copy.close(); + } + try { + bos.flush(); + bos.close(); + } catch (Exception e) { + //e.printStackTrace(); + } + if (null != document) { + document.close(); + } + } + } + } + + + //加水印 + private void setWatermark(ByteArrayOutputStream bos, PdfReader reader, String waterMarkName, String imgPath) { + PdfStamper stamper = null; + try { + stamper = new PdfStamper(reader, bos); + //stamper.setEncryption(null, null, ~(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING), PdfWriter.STANDARD_ENCRYPTION_128); + int total = reader.getNumberOfPages() + 1; + PdfContentByte content; + BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); + PdfGState gs = new PdfGState(); + for (int i = 1; i < total; i++) { + content = stamper.getOverContent(i);// 在内容上方加水印 + //加文字水印 + if (StringUtils.isNotBlank(waterMarkName)) { + gs.setFillOpacity(0.3f); + gs.setStrokeOpacity(0.3f); + content.setGState(gs); + content.beginText(); + content.setColorFill(Color.LIGHT_GRAY); + content.setFontAndSize(base, 50); + content.setTextMatrix(70, 200); + //v:距左 v1:距下 v2: + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 600, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 200, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 800, 600, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 800, 200, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 1100, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 1500, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 800, 1100, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 800, 1500, 40); + content.endText(); + } + if (StringUtils.isNotBlank(imgPath)) { + Image image = Image.getInstance(imgPath); + image.setAbsolutePosition(200, 206); // set the first background + image.scaleToFit(200, 200); + content.addImage(image); + } + content.setColorFill(Color.BLACK); + content.setFontAndSize(base, 8); + } + } catch (IOException | DocumentException e) { + e.printStackTrace(); + } finally { + try { + assert stamper != null; + stamper.close(); + } catch (DocumentException | IOException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/emr/util/Msg.java b/src/main/java/com/emr/util/Msg.java new file mode 100644 index 0000000..006f49a --- /dev/null +++ b/src/main/java/com/emr/util/Msg.java @@ -0,0 +1,75 @@ +/** + * + */ +package com.emr.util; + +import java.util.HashMap; +import java.util.Map; + +/** + *

Title:Msg

+ *

Description:common return class

+ *

Company:

+ * @author hu + * @date + */ +public class Msg { + //state:100-success 200-fail + private int code; + //提示信息 + private String msg; + //用户要返回给浏览器的数据 + private Map extend=new HashMap(); + + public static Msg success(){ + Msg result=new Msg(); + result.setCode(100); + result.setMsg("success"); + return result; + } + + public static Msg fail(){ + Msg result=new Msg(); + result.setCode(200); + result.setMsg("fail"); + return result; + } + + public static Msg fail(String msg){ + Msg result=new Msg(); + result.setCode(200); + result.setMsg(msg); + return result; + } + + public Msg add(String key, Object value){ + this.getExtend().put(key, value); + return this; + } + + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Map getExtend() { + return extend; + } + + public void setExtend(Map extend) { + this.extend = extend; + } + +} diff --git a/src/main/resources/config/jdbc.properties b/src/main/resources/config/jdbc.properties index c9da5d7..0eb961c 100644 --- a/src/main/resources/config/jdbc.properties +++ b/src/main/resources/config/jdbc.properties @@ -5,10 +5,11 @@ #jdbc.mysql.password=root jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver -jdbc.url=jdbc\:sqlserver\://127.0.0.1:1433;databaseName=emr_recode_test +jdbc.url=jdbc\:sqlserver\://127.0.0.1:1433;databaseName=emr_record_zj #jdbc.url=jdbc\:sqlserver\://10.6.1.127:1433;databaseName=DB_PrivilegeManagement_GYFY jdbc.username=sa -jdbc.password=123456 +#jdbc.password=123456 +jdbc.password=xjgs+docus911 #hibernate config hibernate.dialect=org.hibernate.dialect.SQLServerDialect hibernate.show_sql=true @@ -32,18 +33,21 @@ expired=7 # deathExpired=7 -powerUrl=http://127.0.0.1:8080/power/font/getMenusByUserIdAndSysFlag -POWER_URLHEAD=http://127.0.0.1:8080/power -POWER_JSP=http://127.0.0.1:8080/power +powerUrl=http://127.0.0.1:8081/power/font/getMenusByUserIdAndSysFlag +POWER_URLHEAD=http://127.0.0.1:8081/power +POWER_JSP=http://127.0.0.1:8081/power recallReason=ҽԺҪĵ #HomepageDictionary=http://120.27.212.36:9999/WholeCheckInterface/services/HomepageDictionary?wsdl #HomepageDictionary=http://10.6.1.127:9999/WholeCheckInterface/services/HomepageDictionary?wsdl -HomepageDictionary=http://127.0.0.1:8080/WholeCheckInterface/services/HomepageDictionary?wsdl +HomepageDictionary=http://127.0.0.1:8081/WholeCheckInterface/services/HomepageDictionary?wsdl HomepageMethod=CheckData -powerGetUserList=http://127.0.0.1:8080/power/font/getUserList?userName=admin +powerGetUserList=http://127.0.0.1:8081/power/font/getUserList?userName=admin +allAddortIds = 00000000 +#pdf\u6C34\u5370 +pdfWater = \u4F5B\u5C71\u5E02\u9AD8\u660E\u4EBA\u6C11\u533B\u9662 #˵ӿhttp://120.27.212.36:8888/power/font/getMenusByUserIdAndSysFlag #powerUrl=http://120.27.212.36:8888/power/font/getMenusByUserIdAndSysFlag diff --git a/src/main/resources/mapper/Archive_DetailMapper.xml b/src/main/resources/mapper/Archive_DetailMapper.xml index ad925f8..e9e4b5a 100644 --- a/src/main/resources/mapper/Archive_DetailMapper.xml +++ b/src/main/resources/mapper/Archive_DetailMapper.xml @@ -342,4 +342,25 @@ page_number=#{pageNumber,jdbcType=INTEGER} where id = #{id,jdbcType=NVARCHAR} + + + \ 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 d2e8383..9a13a9c 100644 --- a/src/main/resources/mapper/Archive_MasterMapper.xml +++ b/src/main/resources/mapper/Archive_MasterMapper.xml @@ -99,6 +99,15 @@ from archive_master where id = #{id,jdbcType=NVARCHAR} + + + SELECT + * + FROM + zd_assort + + print_flag = 0 + + AND assort_name = #{record.assortName} + + + AND print_flag = ${record.printFlag} + + + ORDER BY + assort_sort + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jspf/confirmJsp.jspf b/src/main/webapp/WEB-INF/jspf/confirmJsp.jspf new file mode 100644 index 0000000..4b309be --- /dev/null +++ b/src/main/webapp/WEB-INF/jspf/confirmJsp.jspf @@ -0,0 +1,45 @@ +<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + diff --git a/src/main/webapp/WEB-INF/views/font/error.jsp b/src/main/webapp/WEB-INF/views/font/error.jsp new file mode 100644 index 0000000..e8e162b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/font/error.jsp @@ -0,0 +1,75 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + +<%@ include file="/WEB-INF/jspf/comm.jspf" %> +<%@ include file="/WEB-INF/jspf/ztreeCommom.jsp" %> + + + + + 提示页面 + + + + + + + + + + +
+
+
+ + 错误提示 + +
+
+
+
${errorMsg}
+
+
+ + diff --git a/src/main/webapp/WEB-INF/views/font/showRecord.jsp b/src/main/webapp/WEB-INF/views/font/showRecord.jsp new file mode 100644 index 0000000..e4bea18 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/font/showRecord.jsp @@ -0,0 +1,171 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + +<%@ include file="/WEB-INF/jspf/comm.jspf" %> +<%@ include file="/WEB-INF/jspf/ztreeCommom.jsp" %> + + + + + 病案浏览 + + + + + + + + + + + + + + + + +
+
+
+ + 病案浏览 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+
+ + + + diff --git a/src/main/webapp/WEB-INF/views/font/showRecordIframe.jsp b/src/main/webapp/WEB-INF/views/font/showRecordIframe.jsp new file mode 100644 index 0000000..7e41af5 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/font/showRecordIframe.jsp @@ -0,0 +1,94 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + +<%@ include file="/WEB-INF/jspf/comm.jspf" %> +<%@ include file="/WEB-INF/jspf/ztreeCommom.jsp" %> +<%@ include file="/WEB-INF/jspf/confirmJsp.jspf" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + + 预览pdfIframe页面 + + + + + + + + +
正在采集,请稍等
+ + + +
+
+
+
+
+ +
+
+ + +
+
+
+
+
+
    +
    +
    +
    +
    +
    + +
    + + + + diff --git a/src/main/webapp/static/js/showRecord/showRecord.js b/src/main/webapp/static/js/showRecord/showRecord.js new file mode 100644 index 0000000..61294af --- /dev/null +++ b/src/main/webapp/static/js/showRecord/showRecord.js @@ -0,0 +1,29 @@ +//初始化函数 +$(function(){ + //加载病案信息 + loadRecord(); + //加载iframe + $("#iframe").prop("src",path+"/font/showRecordIframe?patientId="+$("#patientId").val())+"&assortIds="+assortIds; +}) + +//加载病案信息 +function loadRecord(){ + $.ajax({ + type:'get', + url:path+'/font/getRecord', + data:{masterId:$("#patientId").val()}, + async:false, + dataType:'json', + success:function (data) { + if(null != data && data != ''){ + $("#doctorInCharge").val(data.doctorInCharge); + $("#inpatientNo").val(data.inpNo); + $("#name").val(data.name); + $("#admissTimes").val(data.visitId); + $("#disDate").val(data.dischargeDateTime); + $("#disDeptName").val(data.deptName); + $("#archivestate").val(data.archivestate); + } + } + }) +} \ No newline at end of file diff --git a/src/main/webapp/static/js/showRecord/showRecordIframe.js b/src/main/webapp/static/js/showRecord/showRecordIframe.js new file mode 100644 index 0000000..bf5c1cc --- /dev/null +++ b/src/main/webapp/static/js/showRecord/showRecordIframe.js @@ -0,0 +1,136 @@ +//树操作 +var menu = { + setting: { + view:{ + fontCss : {"font-family": "微软雅黑","color":"blue"} + }, + data:{ + key:{ + name:"name" + }, + simpleData: { + chkStyle: "checkbox", + enable: true, + idKey: "id", + pIdKey: "parentId" + } + }, + check:{ + enable:true + }, + callback: { //回调函数 + onCheck: onCheck, + onClick:onClick} + }, + loadMenuTree:function(){ + var url = ''; + var params = ''; + //获取业务识别编码 + url = path+"/font/getRecordTypeTree"; + params = {patientId:parent.$("#patientId").val(),assortIds:parent.$("#assortIds").val()}; + $.ajax({ + type: "post", + url: url, + data: params, + dataType:"json", + async:false, + success:function(data){ + $.fn.zTree.init($("#ztree"), menu.setting, data); + zTree = $.fn.zTree.getZTreeObj("ztree"); + var nodes = zTree.getNodes(); + zTree.expandNode(nodes[0], true, false, true); + var detailIds = ''; + for (var i = 0; i < data.length; i++) { + if(data[i].selfId != null && data[i].checked == 'true'){ + if(i != data.length - 1){ + detailIds += "'"+data[i].selfId+"',"; + }else{ + detailIds += "'"+data[i].selfId+"'"; + } + } + } + if(detailIds.substring(detailIds.length-1,detailIds.length) == ","){ + detailIds = detailIds.substring(0,detailIds.length-1); + } + if(detailIds == ''){ + toastr.warning('该患者该时间段未上传报告!'); + } + $("#detailIds").val(detailIds); + } + }) + //加载pdf + onloadPdf(); + } +}; +//加载树 +$().ready(function(data){ + menu.loadMenuTree(); + //判断是否是护理按需采集,是显示刷新按钮 + var typeFlag = parent.$("#typeFlag").val(); + if(typeFlag == 1){ + $("#freshBtnDiv").show(); + }else if(typeFlag == 2){ + var delPower = parent.$("#delPower").val(); + if(delPower == 1){ + $("#delBtnDiv").show(); + } + } +}); + +//获取获取树选中节点,赋值隐藏域并加载pdf +function onPdfLoadByselected() { + var treeObj = $.fn.zTree.getZTreeObj("ztree"); + nodes = treeObj.getCheckedNodes(true); + var detailIds = ''; + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].level == 2) { + if (i != (nodes.length - 1)) { + detailIds += "'" + nodes[i].selfId + "',"; + } else { + detailIds += "'" + nodes[i].selfId + "'"; + } + } + } + $("#detailIds").val(detailIds); + //加载pdf + onloadPdf(); +} + +//树选中事件 +function onCheck(e, treeId, treeNode) { + onPdfLoadByselected(); +}; +//树点击事件 +function onClick(e, treeId, treeNode) { + //点击后选中 + zTree.checkNode(treeNode,!treeNode.checked, true); + onPdfLoadByselected(); +}; + +//加载pdfan按钮功能 +function onloadPdf(){ + var url = ''; + var params = ''; + //获取业务识别编码 + var detailIds = $("#detailIds").val(); + if(detailIds != '') { + url = path + "/font/getPdfToPdf"; + params = {detailIds: detailIds}; + $.ajax({ + type: 'post', + url: url, + data: params, + success: function (data) { + if (data.code == 100) { + var pdfUrl = path + "/static/pdfjs/web/viewer.html?file=" + path + "/font/showPdf"; + $("#iframe1").attr("src", pdfUrl); + $("#iframe1").css("height", $("body")[0].offsetHeight) + } else { + toastr.error(data.msg); + } + } + }) + } + /*$("#iframe1").attr("src",path+"/static/pdfjs/web/viewer.html?file="+path+"/font/getPdfToPdf/"+patientId+"/"+detailIds);*/ + +} diff --git a/src/main/webapp/static/js/showRecord/showRecordIframeCommom.js b/src/main/webapp/static/js/showRecord/showRecordIframeCommom.js new file mode 100644 index 0000000..0134515 --- /dev/null +++ b/src/main/webapp/static/js/showRecord/showRecordIframeCommom.js @@ -0,0 +1,18 @@ +//屏蔽鼠标右键 +document.oncontextmenu = function(e) { + var e = e || window.event; + e.returnValue = false; + return false; +} +//禁止快捷键打印 +function disabledPrint(){ + if(event.keyCode==80 && event.ctrlKey){ + event.keyCode=0; + event.returnValue=false; + } + if (event.ctrlKey && event.keyCode == 83) { + event.preventDefault(); + event.returnValue = false; + return false; + } +} \ No newline at end of file