From 24654c7b1c3f23266177582e07399a50b5775e0b Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期四, 30 五月 2024 09:43:38 +0800 Subject: [PATCH] 通过配置决定使用sql查报告或重新生成报告 --- ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java | 242 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 234 insertions(+), 8 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java index ba93a39..584dc8d 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java @@ -650,12 +650,8 @@ //pdfWriter.setPageEvent(new MyHeaderFooter());// 椤电湁椤佃剼 document.open(); document.add(new Header("鍋ュ悍浣撴缁撴灉", "鍋ュ悍浣撴缁撴灉")); - long addTableStartTime = System.currentTimeMillis(); Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkObjectMap = addTable(tjNumber); - System.out.println("addTable鏂规硶鑰楁椂锛�" + (System.currentTimeMillis() - addTableStartTime) + "ms"); - addTableStartTime = System.currentTimeMillis(); Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkListMap = addHuaYanTable(tjNumber); - System.out.println("addHuaYanTable鏂规硶鑰楁椂锛�" + (System.currentTimeMillis() - addTableStartTime) + "ms"); tjOrderRemarkObjectMap.putAll(tjOrderRemarkListMap); for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : tjOrderRemarkObjectMap.entrySet()) { List<TjPdfVO> value = entry.getValue(); @@ -1315,9 +1311,7 @@ printReport.put(tjOrderRemark, null); } // extracted(printReport, one, customer); - long start = System.currentTimeMillis(); extractedNew(printReport, one, customer); - System.out.println("extractedNew鏂规硶鑰楁椂锛�"+(System.currentTimeMillis() - start)); return printReport; } @@ -1356,7 +1350,6 @@ // wqq.eq(TjOrderRemark::getDeptId,"241"); // List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq); List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.addHuaYanTable(tjNumber); - for (TjOrderRemark tjOrderRemark : tjOrderRemarks) { printReport.put(tjOrderRemark, null); } @@ -1655,9 +1648,241 @@ @PostMapping("/preview/batch") @ApiOperation(value = "鎵归噺浣撴鎶ュ憡") + @Transactional public AjaxResult preview(@RequestBody String data){ + String is_batch_report_use_sql = configService.selectConfigByKey("is_batch_report_use_sql"); List<String> tjNumbers = Arrays.stream(data.split(",")).collect(Collectors.toList()); - return tjReportService.makeBatchReport(tjNumbers); + if ("true".equals(is_batch_report_use_sql)) { + return tjReportService.makeBatchReport(tjNumbers); + }else { + return makeReport(tjNumbers); + } + } + + /** + * 閫氳繃sql 閲嶆暣鏁版嵁妯℃澘 鍏ㄩ儴閲嶆柊鐢熸垚 + * @param tjNumbers + * @return + */ + private AjaxResult makeReport(List<String > tjNumbers) { + ArrayList<String> base64Pdfs = new ArrayList<>(); + for (String tjNumber : tjNumbers) { + LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); + wq.eq(TjOrder::getTjNumber, tjNumber); + TjOrder tjOrder = tjOrderService.getOne(wq); + if (null != tjOrder) { + LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); + TjReportTemplate reportTemplate = null; + if (tjOrder.getTjCategory() != null) { + //鏌ヨ瀛楀吀 + LambdaQueryWrapper<SysDictData> wqq = new LambdaQueryWrapper<>(); + wqq.eq(SysDictData::getDictType, "dict_tjtype"); + wqq.eq(SysDictData::getDictValue, tjOrder.getTjCategory()); + SysDictData one = dictDataService.getOne(wqq); + if (one != null) { + //鏌ヨ瀛楀吀 + LambdaQueryWrapper<SysDictData> wqq1 = new LambdaQueryWrapper<>(); + wqq1.eq(SysDictData::getDictType, "report_template_type"); + wqq1.eq(SysDictData::getDictLabel, one.getDictLabel()); + SysDictData one1 = dictDataService.getOne(wqq1); + if (one1 != null) { + tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue()); + } else { + tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); + } + } else { + tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); + } + tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); + reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); + } else { + tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); + reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2); + } + + String template = reportTemplate.getTemplate(); + String userId = null; + if (template == null) { + // 娌℃湁璇ユā鏉� + continue; + } + // --------浠ヤ笂------- 鏍规嵁鏁版嵁搴撲腑鐨勬ā鏉夸簩杩涘埗鏂囦欢 杞琾df 鍒涘缓鏂囦欢澶� 灏唒df鏀捐繘鏈湴鏂囦欢澶� + LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>(); + wq1.eq(TjCustomer::getCusId, tjOrder.getUserId()); + TjCustomer tjCustomer = tjCustomerService.getOne(wq1); + LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>(); + wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId()); + DictComp dictComp = dictCompService.getOne(wq111); + LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>(); + wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId()); + wq2.isNotNull(TjOrderDetail::getFlowingWaterId); + List<TjOrderDetail> list = tjOrderDetailService.list(wq2); + for (TjOrderDetail tjOrderDetail : list) { + TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); + tjOrderDetail.setProject(tjProject); + } + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + PdfStamper ps = null; + PdfReader reader = null; + try { + // 璇诲叆pdf琛ㄥ崟 + reader = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template))); + // 鏍规嵁琛ㄥ崟鐢熸垚涓�涓柊鐨刾df + ps = new PdfStamper(reader, byteArrayOutputStream); + // 鑾峰彇pdf琛ㄥ崟 + AcroFields form = ps.getAcroFields(); + //璇ュ瓧浣撻�犳垚绫诲瀷涓嶅潎鍖�锛屼絾鏄痯df杞浘鐗囦笉涔辩爜 + BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + form.addSubstitutionFont(bf); + // 濉厖鏁版嵁缁欒〃鏍� + Map<String, Object> data = new HashMap<>(); + // 璁剧疆鐢ㄦ埛淇℃伅 + setUserInfo(tjNumber, tjOrder, tjCustomer, dictComp, list, data); + //灏侀潰椤典笅闈㈢殑鎬绘寤鸿鏄剧ず + if (tjOrder.getCheckAdvice() == null) { + data.put("remark", "鏃�"); + } else { + data.put("remark", tjOrder.getCheckAdvice()); + } + //灏侀潰椤典笅闈㈢殑鎬绘寤鸿鏄剧ず + if (tjOrder.getCheckDoctor() == null) { + data.put("docname", "鏃�"); + } else { + data.put("docname", tjOrder.getCheckDoctor()); + } + //寮傚父椤圭洰 + //鎷兼帴閲嶅ぇ闃虫�х粨鏋� + StringBuffer str = new StringBuffer(); + str.append("銆愰噸澶ч槼鎬ч」鐩�慭n"); + LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>(); + bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber); + final List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper); + if (list1 != null && list1.size() > 0) { + for (int i = 0; i < list1.size(); i++) { + str.append(i + 1).append("銆�").append(list1.get(i).getProName()).append(";\n"); + } + } else { + str.append(" 鏃狅紱\n"); + } + //鎷兼帴寮傚父椤圭洰 + str.append("銆愬紓甯告儏鍐甸」鐩�慭n"); + if (list.size() > 0) { + int[] index = {0}; + List<TjOrderDetail> collect = list.stream() + .filter(item -> item.getExceptionDesc() == 1).collect(Collectors.toList()); + if (collect.isEmpty()) { + str.append(" 鏃狅紱\n"); + } else { + collect.forEach(item -> str.append(index[0]++ + 1).append("銆�").append(projectService.getById(item.getProId()).getProName()).append(";\n")); + } + } else { + str.append(" 鏃狅紱\n"); + } + //寮傚父椤圭洰 + data.put("yichang", str.toString()); + // 閬嶅巻data 缁檖df琛ㄥ崟琛ㄦ牸璧嬪�� + for (String key : data.keySet()) { + form.setField(key, data.get(key).toString()); + } + //璁剧疆涓烘棤娉曠紪杈� + ps.setFormFlattening(true); + ps.close(); + reader.close(); + // 灏嗕慨鏀瑰悗鐨凱DF鍐呭鍐欏叆 + byte[] bytes = byteArrayOutputStream.toByteArray(); + // 鍒涘缓鏂扮殑PDF鏂囨。 + Document document = new Document(PageSize.A4); + ByteArrayOutputStream finalOutPut = new ByteArrayOutputStream(); + PdfCopy copy = new PdfCopy(document, finalOutPut); + document.open(); + reader = new PdfReader(bytes); + int numberOfPages = reader.getNumberOfPages(); + for (int i = 1; i <= numberOfPages; i++) { + PdfImportedPage page = copy.getImportedPage(reader, i); + copy.addPage(page); + } + // 娣诲姞璇︽儏椤� + document.newPage(); + reader.close(); + ByteArrayOutputStream infoByteArrayOutputStream = setInfoPage(userId, tjNumber); + reader = new PdfReader(infoByteArrayOutputStream.toByteArray()); + int numberOfPages1 = reader.getNumberOfPages(); + for (int i = 1; i <= numberOfPages1; i++) { + PdfImportedPage page = copy.getImportedPage(reader, i); + copy.addPage(page); + } + infoByteArrayOutputStream.close(); + // 蹇冪數鍥句互鍙婇檮浠� + // 鍥犳暟鎹簱琛ㄥ瓨鏀綽ase64瀵艰嚧鏌ヨ缂撴參 杩欓噷鎵ц缂撴參 + // 鍦ㄨ繖閲屽鍔犱竴鏉℃煡璇ount 瀵逛簬娌℃湁杩藉姞闄勪欢鐨� 鎻愬崌閫熷害 + LambdaQueryWrapper<TjReport> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TjReport::getTjNumber, tjNumber) + .and(item -> item.eq(TjReport::getType, "闄勪欢").or().eq(TjReport::getType, "蹇冪數鍥�")); + Integer selectCount = tjReportService.getSelectCount(queryWrapper); + if (selectCount > 0) { + String base64XinDianTu = null; + String base64FuJian = null; + List<TjReport> reportList = tjReportService.list(queryWrapper); + TjReport xinDianTu = null; + TjReport fuJian = null; + if (!reportList.isEmpty()) { + for (TjReport tjReport : reportList) { + if ("闄勪欢".equals(tjReport.getType())) { + fuJian = tjReport; + base64FuJian = fuJian.getReport(); + } else { + xinDianTu = tjReport; + base64XinDianTu = xinDianTu.getReport(); + } + } + } + if (xinDianTu != null) { + if (fuJian != null) { + addPageByPDFBase64(copy, base64FuJian); + document.newPage(); + addPageByPDFBase64(copy, base64XinDianTu); + } else { + addPageByPDFBase64(copy, base64XinDianTu); + } + } else { + if (fuJian != null) { + addPageByPDFBase64(copy, base64FuJian); + } + } + } + copy.close(); + base64Pdfs.add(Base64.getEncoder().encodeToString(finalOutPut.toByteArray())); + document.close(); + finalOutPut.close(); + reader.close(); + //淇敼order琛ㄤ腑鐨勬墦鍗版姤鍛婃椂闂翠负褰撳墠鏃堕棿 + LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(TjOrder::getTjNumber, tjNumber); + updateWrapper.set(TjOrder::getReportTime, new Date()); + updateWrapper.set(TjOrder::getPrintLastTime, new Date()); + updateWrapper.set(TjOrder::getDownloadLastTime, new Date()); + updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END); + tjOrderService.update(updateWrapper); + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + e.printStackTrace(); + } + } + } + try { + byte[] mergePDFs = PDFDocumentUtil.mergePDFs(base64Pdfs); + // 鏈湴鐢熸垚娴嬭瘯 +// String PDF_FILE = "d:\\Users\\w\\Desktop\\test.pdf"; +// BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(PDF_FILE)); +// outputStream.write(mergePDFs); +// outputStream.flush(); +// outputStream.close(); + String s = Base64.getEncoder().encodeToString(mergePDFs); + return AjaxResult.success().put("file",s); + } catch (DocumentException | IOException e) { + e.printStackTrace(); + return AjaxResult.error("鎵归噺鐢熸垚澶辫触"); + } } @GetMapping("/revocationReport/{TjNumber}") @@ -1665,6 +1890,7 @@ public AjaxResult revocationReport(@PathVariable("TjNumber") String tjNumber) { //閫昏緫鍒犻櫎鏁版嵁搴撻噷鐨勬姤鍛� QueryWrapper<TjReport> wq1 = new QueryWrapper<>(); + wq1.select("re_id"); wq1.eq("tj_number", tjNumber); wq1.eq("type", "浣撴鎶ュ憡"); TjReport tjReport = tjReportService.getOne(wq1); -- Gitblit v1.8.0