From 97aedb4847564343dd5570d8dcd34fe732694c89 Mon Sep 17 00:00:00 2001
From: zhaowenxuan <chacca165@163.com>
Date: 星期三, 29 五月 2024 18:01:12 +0800
Subject: [PATCH] 批量生成体检报告

---
 ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java |  300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 298 insertions(+), 2 deletions(-)

diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java
index f74400a..efa15f4 100644
--- a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java
+++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java
@@ -1,11 +1,11 @@
 package com.ltkj.hosp.service.impl;
 
-import java.io.File;
-import java.io.OutputStream;
+import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
@@ -18,7 +18,9 @@
 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.SysDictData;
 import com.ltkj.common.utils.DateUtils;
+import com.ltkj.common.utils.PDFDocumentUtil;
 import com.ltkj.common.utils.SecurityUtils;
 import com.ltkj.common.utils.pdfutils.MergePdf;
 import com.ltkj.common.utils.pdfutils.MyHeaderFooter;
@@ -26,10 +28,13 @@
 import com.ltkj.common.utils.pdfutils.PdfUtils;
 import com.ltkj.hosp.domain.*;
 import com.ltkj.hosp.service.*;
+import com.ltkj.mall.mallOrderUtils.TjConstants;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import com.ltkj.hosp.mapper.TjReportMapper;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import javax.annotation.Resource;
 
@@ -509,4 +514,295 @@
         }
         return table;
     }
+
+
+    @Override
+    @Transactional
+    public AjaxResult makeBatchReport(List<String> tjNumbers) {
+        return sqlGetReportToMake(tjNumbers);
+    }
+
+    /**
+     * 閫氳繃sql 鐩存帴鏌ユ姤鍛奲ase64杩涜鏁村悎杩斿洖
+     * 濡傛灉sql鏁版嵁閲忓法澶� 鏌ヨ缂撴參 鍙互璇曡瘯 makeReport(List<String > tjNumbers)宸叉敞閲�
+     * @param tjNumbers
+     * @return
+     */
+    private AjaxResult sqlGetReportToMake(List<String> tjNumbers) {
+        LambdaQueryWrapper<TjReport> tjReportLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        tjReportLambdaQueryWrapper.in(TjReport::getTjNumber, tjNumbers);
+        List<TjReport> list = tjReportService.list(tjReportLambdaQueryWrapper);
+        ArrayList<String> base64Pdfs = new ArrayList<>();
+        for (TjReport report : list) {
+            if (report == null || report.getReport() == null) {
+                // 娌℃湁璇ユ姤鍛� 鐩存帴璺宠繃
+                continue;
+            }
+            base64Pdfs.add(report.getReport());
+        }
+        tjNumbers.forEach(tjNumber ->{
+            LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>();
+            updateWrapper.eq(TjOrder::getTjNumber, tjNumber);
+            updateWrapper.set(TjOrder::getPrintLastTime, new Date());
+            updateWrapper.set(TjOrder::getDownloadLastTime, new Date());
+            updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
+            tjOrderService.update(updateWrapper);
+        });
+        try {
+            byte[] mergePDF = PDFDocumentUtil.mergePDFs(base64Pdfs);
+            String s = Base64.getEncoder().encodeToString(mergePDF);
+            return AjaxResult.success().put("file",s);
+            // 鏈湴鐢熸垚娴嬭瘯
+//            String PDF_FILE = "d:\\Users\\w\\Desktop\\test.pdf";
+//            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(PDF_FILE));
+//            outputStream.write(mergePDF);
+//            outputStream.flush();
+//            outputStream.close();
+        } catch (DocumentException | IOException e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return AjaxResult.error("鎵归噺鐢熸垚澶辫触");
+        }
+    }
+
+    /**
+     * 閫氳繃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);
+//                }
+//                // 鍏辫鑰楁椂5695姣 浠ヤ笅浠g爜鑰楁椂3528
+//                // TODO PDF鍒涘缓浼樺寲
+//                long pdfMkStart = System.currentTimeMillis();
+//                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());
+//                    }
+//                    //寮傚父椤圭洰
+////                    data.put("yichang", "銆�1銆戝眻鍏変笉姝n" +
+////                            "銆�2銆戞墎妗冧綋鑲モ激\n" +
+////                            "銆�3銆戜綋閲嶆寚鏁板饩糪n" +
+////                            "銆�4銆戔編鑴傚紓甯革紙鎬昏儐鍥洪唶澧炩炯锛涒舰娌逛笁閰饩硷級\n" +
+////                            "銆�5銆懳�-饩曟皑閰拌浆绉婚叾澧炩炯锛涘ぉ饣斿啲姘ㄩ吀姘ㄥ熀杞Щ閰跺饩硷紱涓欐皑閰告皑鍩鸿浆绉婚叾澧炩炯\n" +
+////                            "銆�6銆戣交饩勪腑搴﹁剛鑲倽");
+//
+//                    //鎷兼帴閲嶅ぇ闃虫�х粨鏋�
+//                    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) {
+////                        for (int i = 0; i < list.size(); i++) {
+////                            if (list.get(i).getExceptionDesc() == 1) {
+////                                str.append(i + 1).append("銆�").append(projectService.getById(list.get(i).getProId()).getProName()).append(";\n");
+////                            }
+////                        }
+//                        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 瀵逛簬娌℃湁杩藉姞闄勪欢鐨� 鎻愬崌閫熷害
+//                    long fujianStart = System.currentTimeMillis();
+//                    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();
+//        } catch (DocumentException | IOException e) {
+//            e.printStackTrace();
+//            return AjaxResult.error("鎵归噺鐢熸垚澶辫触");
+//        }
+//        return AjaxResult.success();
+//    }
 }

--
Gitblit v1.8.0