From 148a7f11b0ead8539cae824f02dda19a703f4d0b Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期六, 07 十二月 2024 16:54:02 +0800 Subject: [PATCH] zjh20241207 --- ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java | 296 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 242 insertions(+), 54 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java index 98de276..e1955ac 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java @@ -2,19 +2,19 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import com.itextpdf.text.pdf.draw.LineSeparator; import com.ltkj.common.core.domain.AjaxResult; +import com.ltkj.common.core.domain.entity.SysUser; import com.ltkj.common.utils.DateUtils; import com.ltkj.framework.config.MatchUtils; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.mapper.DictUserInfoMapper; import com.ltkj.hosp.service.*; +import com.ltkj.hosp.sqlDomain.LtkjExamJcbgd; import com.ltkj.hosp.sqlDomain.LtkjHybgd; import com.ltkj.hosp.sqlDomain.LtkjHysqd; import com.ltkj.system.service.ISysConfigService; @@ -25,11 +25,13 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; import java.util.List; @@ -75,10 +77,10 @@ private DictUserInfoMapper dictUserInfoMapper; @Autowired private ISysConfigService sysConfigService; - -// private static final - // TODO PDF鎵�鏈夊尰甯堝悕瀛楁樉绀� 鏍规嵁閰嶇疆is_report_pdf_use_ysqm鍐冲畾鏄惁浣跨敤绛惧悕鍥剧墖 - // TODO 鏈夌鍚嶅浘鐗囧垯浣跨敤绛惧悕鍥剧墖 娌℃湁鍒欎娇鐢ㄦ枃瀛楁樉绀� + @Resource + private LtkjExamJcbgdService jcbgdService; + @Resource + private LtkjExamJcsqdService jcsqdService; private List<Map<String, Object>> makePDFInfo(HashMap<String, Object> map, AjaxResult ajaxResult, String key) { List<Map<String, Object>> data = null; @@ -132,7 +134,10 @@ // 缁勮妫�楠屾暟鎹� HashMap<String, Object> map = makeHisJianYan(tjOrder, customer); makeHisJianYanTable(document1, map); + + List<ByteArrayOutputStream> jianchas = makeHisJianChaTable(tjOrder); +// List<ByteArrayOutputStream> jianchas = makeCcgcHisJianChaTable(tjOrder); document1.close(); pdfWriter.close(); PdfReader reader = null; @@ -202,6 +207,13 @@ List<LtkjGetexamreportinfo> list = ltkjGetexamreportinfoService.list(lambdaQueryWrapper); // List<LtkjGetexamreportinfo> list = ltkjGetexamreportinfoService.list(); List<ByteArrayOutputStream> jianchas = new ArrayList<>(); + Paragraph elements = new Paragraph(); + elements.setLeading(5f); + elements.setSpacingBefore(10f); + elements.setSpacingAfter(10f); + elements.setAlignment(Element.ALIGN_RIGHT); + Phrase phrase = new Phrase(); + Font doctorFonts = PdfUtils.setFont(11); for (LtkjGetexamreportinfo getexamreportinfo : list) { String xm = getexamreportinfo.getHzxm(); String xb = getexamreportinfo.getHzxb().equals("2") ? "濂�" : "鐢�"; @@ -223,13 +235,140 @@ String sqrxm = getexamreportinfo.getSqrxm(); String zyh = ""; String ch = ""; - String footer = "鐢宠浜猴細" + sqrxm + " 瀹℃牳鍖诲笀锛�" + shysqm + " 鍖诲笀绛惧悕锛�" + bgysqm; - ByteArrayOutputStream outputStream = makeJcPDFByteArrayStream(xm, xb, nl, jcks, zyh, ch, sjks, jcsb, jch, jcxm, ms, ts, null, footer); + String sqrbh = getexamreportinfo.getSqrbh(); + String shysbh = getexamreportinfo.getShysbh(); + String bgysbh = getexamreportinfo.getBgysbh(); + String jcysqm = getexamreportinfo.getJcysqm(); + String jcysbh = getexamreportinfo.getJcysbh(); + StringBuilder builder; + String footer; + // 妫�鏌ヨ繑鍥炵殑鍖诲笀缂栫爜涓嶅睘浜巋is鍖诲笀id 鏆傛敞閲� +// String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm"); +// if (key.equals("Y")){ +// footer = null; +// if (null != sqrbh && StrUtil.isNotBlank(sqrbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, sqrxm, sqrbh,"鐢宠浜猴細"); +// } +// if (null != jcysbh && StrUtil.isNotBlank(jcysbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, jcysqm, jcysbh," 妫�鏌ュ尰甯堬細"); +// } +// if (null != shysbh && StrUtil.isNotBlank(shysbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, shysqm, shysbh," 瀹℃牳鍖诲笀锛�"); +// } +// if (null != bgysbh && StrUtil.isNotBlank(bgysbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, bgysqm, bgysbh," 鎶ュ憡鍖诲笀锛�"); +// } +// }else { + builder = new StringBuilder(); + if (null != sqrxm && StrUtil.isNotBlank(sqrxm)){ + builder.append("鐢宠浜猴細").append(sqrxm); + } + if (null != jcysqm && StrUtil.isNotBlank(jcysqm)){ + builder.append(" 妫�鏌ュ尰甯堬細").append(jcysqm); + } + if (null != shysqm && StrUtil.isNotBlank(shysqm)){ + builder.append(" 瀹℃牳鍖诲笀锛�").append(shysqm); + } + if (null != bgysqm && StrUtil.isNotBlank(bgysqm)){ + builder.append(" 鎶ュ憡鍖诲笀锛�").append(bgysqm); + } + footer = builder.toString().trim(); +// } +// elements.add(phrase); + ByteArrayOutputStream outputStream = makeJcPDFByteArrayStream(xm, xb, nl, jcks, zyh, ch, sjks, jcsb, jch, jcxm, ms, ts, null, footer,elements); if (outputStream == null) throw new Exception(); jianchas.add(outputStream); } return jianchas; + } + + + /** + * 鐢熸垚妫�鏌ヨ〃鏍煎瓨鍌ㄨ繃绋嬫椂鐢� + * + * @param tjOrder + * @return + */ + private List<ByteArrayOutputStream> makeCcgcHisJianChaTable(TjOrder tjOrder) throws Exception { + + TjCustomer customer = tjCustomerService.getById(tjOrder.getUserId()); + + List<LtkjExamJcbgd> list=jcbgdService.getJianJcBaoGaoDanByTjh(tjOrder.getCardId()); + + List<ByteArrayOutputStream> jianchas = new ArrayList<>(); + Paragraph elements = new Paragraph(); + elements.setLeading(5f); + elements.setSpacingBefore(10f); + elements.setSpacingAfter(10f); + elements.setAlignment(Element.ALIGN_RIGHT); + + for (LtkjExamJcbgd getexamreportinfo : list) { + String xm = customer.getCusName(); + String xb = customer.getCusSex()==2 ? "濂�" : "鐢�"; + String nl = customer.getAge(); + String jcks = "浣撴涓績"; + String sjks = ""; + String jcsb = ""; + String jch = getexamreportinfo.getTmh(); + String jcxm = getexamreportinfo.getXmmc(); + String ms = getexamreportinfo.getYxbx(); + String ts = getexamreportinfo.getYxzd(); + String bgysqm = getexamreportinfo.getShysxm(); + String shysqm = getexamreportinfo.getShysdm(); + String sqrxm = "鐜嬪仴钀�"; + String zyh = ""; + String ch = ""; + String jcysqm = getexamreportinfo.getShysdm(); + StringBuilder builder; + String footer; + builder = new StringBuilder(); + if (null != sqrxm && StrUtil.isNotBlank(sqrxm)){ + builder.append("鐢宠浜猴細").append(sqrxm); + } + if (null != jcysqm && StrUtil.isNotBlank(jcysqm)){ + builder.append(" 妫�鏌ュ尰甯堬細").append(jcysqm); + } + if (null != shysqm && StrUtil.isNotBlank(shysqm)){ + builder.append(" 瀹℃牳鍖诲笀锛�").append(shysqm); + } + if (null != bgysqm && StrUtil.isNotBlank(bgysqm)){ + builder.append(" 鎶ュ憡鍖诲笀锛�").append(bgysqm); + } + footer = builder.toString().trim(); + ByteArrayOutputStream outputStream = makeJcPDFByteArrayStream(xm, xb, nl, jcks, zyh, ch, sjks, jcsb, jch, jcxm, ms, ts, null, footer,elements); + if (outputStream == null) + throw new Exception(); + jianchas.add(outputStream); + } + return jianchas; + } + + /** + * 鍖诲笀淇℃伅琛� + * @param phrase + * @param doctorFonts + * @param sqrxm + * @param sqrbh + * @throws BadElementException + */ + private void makeYiShiInfoLine(Phrase phrase, Font doctorFonts, String sqrxm, String sqrbh,String title) throws BadElementException { + String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByHisDictCode(sqrbh); +// String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByUserId(sqrbh); + if (null != qmImg && StrUtil.isNotBlank(qmImg)) { + byte[] decode = Base64.getDecoder().decode(qmImg); + Image image = null; + try { + image = Image.getInstance(decode); + image.scaleToFit(60, 25); + phrase.add(new Chunk(title,doctorFonts)); + phrase.add(new Chunk(image,0,-10,true)); + } catch (IOException e) { + phrase.add(new Chunk(title+sqrxm, doctorFonts)); + } + }else { + phrase.add(new Chunk(title+sqrxm, doctorFonts)); + } } /** @@ -242,7 +381,7 @@ private void savePDFFile(String outputFileName1, TjOrder tjOrder, TjCustomer customer, ByteArrayOutputStream finalOutPut) throws IOException { // 鏂囦欢閰嶇疆 // String outputPath1 = "/Users/chacca/寮�鍙戠浉鍏�/浠g爜/"; - String outputPath1 = value + "\\"; + String outputPath1 = value + File.separator; File file = new File(outputPath1 + outputFileName1); BufferedOutputStream outputStream = null; outputStream = new BufferedOutputStream(new FileOutputStream(file)); @@ -259,7 +398,7 @@ * @param map * @throws DocumentException */ - private void makeHisJianYanTable(Document document1, HashMap<String, Object> map) throws DocumentException, IOException { + private void makeHisJianYanTable(Document document1, HashMap<String, Object> map) throws DocumentException { if (!map.isEmpty()) { String[] titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"}; float[] titlesWidth = new float[]{120, 120, 120, 120}; @@ -270,7 +409,7 @@ ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data"); addJianYanTable(document1, titleName, titles, titlesWidth, lists); if (!jyys.isEmpty()) { - Font doctorFonts = PdfUtils.setFont(9); + Font doctorFonts = PdfUtils.setFont(11); String doctors = ""; Paragraph elements = new Paragraph(); elements.setLeading(5f); @@ -286,11 +425,15 @@ String[] split = s.split("\\|"); String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByHisDictCode(split[1]); if (null != qmImg && StrUtil.isNotBlank(qmImg)) { - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(Base64.getDecoder().decode(qmImg)); byte[] decode = Base64.getDecoder().decode(qmImg); - Image image = Image.getInstance(decode); - image.scaleToFit(60, 25); - phrase.add(new Chunk(image,0,-10,true)); + Image image = null; + try { + image = Image.getInstance(decode); + image.scaleToFit(60, 25); + phrase.add(new Chunk(image,0,-10,true)); + } catch (IOException e) { + phrase.add(new Chunk(split[0].trim(),doctorFonts)); + } } else { phrase.add(new Chunk(split[0].trim(),doctorFonts)); } @@ -373,20 +516,7 @@ document1.add(pp); } //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖ 绌轰笉鑳芥樉绀簄ull - if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { - //涓绘鍖诲笀 - String doctorName = "涓绘鍖诲笀锛�" + userService.getById(entry.getKey().getDoctorName()).getNickName(); - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } else { - String doctorName = "涓绘鍖诲笀锛�" + "鏃�"; - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } + zhuJianYiShi(document1, entry); //鍒嗗壊绾� LineSeparator objectName = new LineSeparator(); document1.add(objectName); @@ -435,20 +565,7 @@ document1.add(pp); } //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖ 绌轰笉鑳芥樉绀簄ull - if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { - //涓绘鍖诲笀 - String doctorName = "涓绘鍖诲笀锛�" + userService.getById(entry.getKey().getDoctorName()).getNickName(); - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } else { - String doctorName = "涓绘鍖诲笀锛�" + "鏃�"; - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } + zhuJianYiShi(document1, entry); //鍒嗗壊绾� LineSeparator objectName = new LineSeparator(); document1.add(objectName); @@ -457,11 +574,67 @@ } } + /** + * 涓昏鍖诲笀琛屾樉绀鸿缃� + * @param document1 + * @param entry + * @throws DocumentException + */ + private void zhuJianYiShi(Document document1, Map.Entry<TjOrderRemark, List<TjPdfVO>> entry) throws DocumentException { + if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { + //涓绘鍖诲笀 + String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm"); + SysUser sysUser = userService.getById(entry.getKey().getDoctorName()); + Font doctorFonts = PdfUtils.setFont(9); + if (key.equals("Y")){ + String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByUserId(String.valueOf(sysUser.getUserId())); + if (null != qmImg && StrUtil.isNotBlank(qmImg)) { + Paragraph elements = new Paragraph(); + elements.setLeading(5f); + elements.setSpacingBefore(10f); + elements.setSpacingAfter(10f); + elements.setAlignment(Element.ALIGN_RIGHT); + Phrase phrase = new Phrase(); + phrase.add(new Chunk("涓绘鍖诲笀锛�",doctorFonts)); + byte[] decode = Base64.getDecoder().decode(qmImg); + Image image = null; + try { + image = Image.getInstance(decode); + image.scaleToFit(60, 25); + phrase.add(new Chunk(image,0,-10,true)); + elements.add(phrase); + document1.add(elements); + } catch (IOException e) { + String doctorName = "涓绘鍖诲笀锛�" + sysUser.getNickName(); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + }else { + String doctorName = "涓绘鍖诲笀锛�" + sysUser.getNickName(); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + }else { + String doctorName = "涓绘鍖诲笀锛�" + sysUser.getNickName(); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + } else { + String doctorName = "涓绘鍖诲笀锛�" + "鏃�"; + Font doctorFonts = PdfUtils.setFont(9); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + } + public HashMap<String, Object> makeHisJianYan(TjOrder tjOrder, TjCustomer customer) { LambdaQueryWrapper<LtkjHysqd> ltkjHysqdLambdaQueryWrapper = new LambdaQueryWrapper<>(); ltkjHysqdLambdaQueryWrapper.eq(LtkjHysqd::getTjh, tjOrder.getCardId()); List<LtkjHysqd> list = ltkjHysqdService.list(ltkjHysqdLambdaQueryWrapper); -// List<LtkjHysqd> list = ltkjHysqdService.list(); HashMap<String, Object> data = new HashMap<>(); for (LtkjHysqd hysqd : list) { LambdaQueryWrapper<LtkjHybgd> ltkjHybgdLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -611,6 +784,7 @@ } //寮傚父椤圭洰 data.put("yichang", str.toString()); + data.put("zjrq",new SimpleDateFormat("yyyy-MM-dd").format(tjOrder.getCheckTime())); // 閬嶅巻data 缁檖df琛ㄥ崟琛ㄦ牸璧嬪�� for (String key : data.keySet()) { acroFields.setField(key, data.get(key).toString()); @@ -654,12 +828,13 @@ * @param customer */ private void notHuaYanData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) { - LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>(); - wqq.eq(TjOrderRemark::getTjNumber, tjNumber); - wqq.ne(TjOrderRemark::getDeptId, "241"); - wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257"); - wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId()); - List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq); +// LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>(); +// wqq.eq(TjOrderRemark::getTjNumber, tjNumber); +// wqq.ne(TjOrderRemark::getDeptId, "241"); +// wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257"); +// wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId()); +// List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq); + List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.notHuaYanData(tjNumber); for (TjOrderRemark tjOrderRemark : tjOrderRemarks) { printReport.put(tjOrderRemark, null); } @@ -870,12 +1045,17 @@ * @param footer * @return bytearrayoutputstream */ - public static ByteArrayOutputStream makeJcPDFByteArrayStream(String xm, String xb, String nl, String jcks, String zyh, String ch, String sjks, String jcsb, String jch, String jcxm, String ms, String ts, File[] files, String footer) { + public static ByteArrayOutputStream makeJcPDFByteArrayStream(String xm, String xb, String nl, String jcks, String zyh, String ch, String sjks, String jcsb, String jch + , String jcxm, String ms, String ts, File[] files, String footer,Paragraph elements) { try { Document document = new Document(PageSize.A4); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter writer = PdfWriter.getInstance(document, baos); - writer.setPageEvent(new Footer(footer)); + if (footer != null) { + writer.setPageEvent(new Footer(footer)); + } else { + writer.setPageEvent(new Footer(elements)); + } document.open(); document.setMargins(70, 70, 40, 40); @@ -886,7 +1066,7 @@ table1.setSpacingAfter(10f); Font titleFont = PdfUtils.setFont(12); - PdfPCell mergedCell = new PdfPCell(new Phrase("娉� 宸� 鍘� 浜� 姘� 鍖� 闄�", titleFont)); + PdfPCell mergedCell = new PdfPCell(new Phrase("闄曞仴鍖绘緞鍚堢熆鍔″眬涓績鍖婚櫌", titleFont)); mergedCell.setBorder(Rectangle.NO_BORDER); mergedCell.setColspan(10); mergedCell.setHorizontalAlignment(Element.ALIGN_CENTER); @@ -1146,9 +1326,14 @@ static class Footer extends PdfPageEventHelper { private String footerText; private Font footerFont = PdfUtils.setFont(10); + private Paragraph paragraph; public Footer(String footerText) { this.footerText = footerText; + } + + public Footer(Paragraph paragraph){ + this.paragraph = paragraph; } @Override @@ -1158,7 +1343,10 @@ footer.setWidthPercentage(100); footer.getDefaultCell().setBorder(Rectangle.NO_BORDER); footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); - footer.addCell(new Phrase(footerText, footerFont)); + if (footerText != null) + footer.addCell(new Phrase(footerText, footerFont)); + if (paragraph != null) + footer.addCell(paragraph); footer.writeSelectedRows(0, -1, 36, 50, writer.getDirectContent()); } } -- Gitblit v1.8.0