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