From 9155df2aeab5b0d95c89dd928dbaefbfbaeae9d1 Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期四, 05 九月 2024 17:10:35 +0800
Subject: [PATCH] zjh 2024-09-05

---
 ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java |  466 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 411 insertions(+), 55 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 fa4f7b6..57ceb07 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
@@ -2,10 +2,10 @@
 
 import java.io.*;
 import java.net.URL;
-import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -20,29 +20,30 @@
 import com.itextpdf.text.*;
 import com.itextpdf.text.pdf.*;
 import com.itextpdf.text.pdf.draw.LineSeparator;
-import com.ltkj.common.annotation.Log;
 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.StringUtils;
 import com.ltkj.framework.config.MatchUtils;
 import com.ltkj.hosp.domain.*;
 import com.ltkj.hosp.service.*;
-import com.ltkj.hosp.vodomain.UpdateOrderRemarkVo;
 import com.ltkj.mall.mallOrderUtils.TjConstants;
 import com.ltkj.system.service.ISysConfigService;
 import com.ltkj.system.service.ISysDictDataService;
 import com.ltkj.system.service.ISysUserService;
 import com.ltkj.web.config.pdfutils.MergePdf;
-import com.ltkj.web.config.pdfutils.MyHeaderFooter;
 import com.ltkj.web.config.pdfutils.PDFBinaryUtil;
 import com.ltkj.web.config.pdfutils.PdfUtils;
+import com.ltkj.web.controller.his.HisPDFUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.bind.annotation.*;
 import com.ltkj.common.core.controller.BaseController;
 import com.ltkj.common.core.domain.AjaxResult;
@@ -95,9 +96,10 @@
     private ISysDictDataService dictDataService;
     @Resource
     private ITbTransitionService transitionService;
-
     @Autowired
     private ITjBigPositiveService tjBigPositiveService;
+    @Autowired
+    private HisPDFUtil hisPDFUtil;
 
     @GetMapping("/savePdf")
     @ApiOperation(value = "浠庢湰鍦板瓨鍌ㄦā鏉垮埌鏁版嵁搴�")
@@ -285,15 +287,160 @@
 //        remarkVo.setProId("1633660948860522555");
 //        updateOrderRemarkVos.add(remarkVo);
 //        tjCheckController.checkUpdateOrderRemark(updateOrderRemarkVos);
-        System.out.println("---------------------------------------newFun寮�濮�--------------------------------------------------");
-        error = newFun(tjNumber);
-        System.out.println("-------------------------------------------缁撴潫----------------------------------------------");
+//        System.out.println("---------------------------------------newFun寮�濮�--------------------------------------------------");
+        // 浠ュ墠娴嬭瘯pdf鏂规硶
+//        error = newFun(tjNumber);
+//        System.out.println("-------------------------------------------缁撴潫----------------------------------------------");
         // 鎾ら攢
 //        revocationReport(tjNumber);
-        if (error != null) {
-            return error;
+//        if (error != null) {
+//            return error;
+//        }
+//        return AjaxResult.success("璇ョ敤鎴蜂綋妫�鏈畬鎴愶紝涓嶈兘鎵撳嵃鎶ュ憡锛侊紒锛�");
+        int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber);
+        if (num > 0) {
+            return AjaxResult.error("鏈夊欢鏈熼」鐩殏涓嶈兘鐢熸垚鎶ュ憡!!!");
         }
-        return AjaxResult.success("璇ョ敤鎴蜂綋妫�鏈畬鎴愶紝涓嶈兘鎵撳嵃鎶ュ憡锛侊紒锛�");
+        //鍒ゆ柇琛ㄤ腑鏈夋病鏈夎浣撴鎶ュ憡  涓嶈兘閲嶅鐢熸垚
+        LambdaQueryWrapper<TjReport> wqa = new LambdaQueryWrapper<>();
+        wqa.eq(TjReport::getTjNumber, tjNumber);
+        wqa.eq(TjReport::getType, "浣撴鎶ュ憡");
+        Integer count = tjReportService.getSelectCount(wqa);
+        if (count != 0) {
+            return AjaxResult.error("璇ュ鎴锋姤鍛婂凡鐢熸垚锛佷笉鑳介噸澶嶇敓鎴愶紒鍙洿鎺ラ瑙堟垨鎵撳嵃锛�");
+        }
+//        String configByKey = configService.selectConfigByKey("sfkqdyhis");
+        String configByKey = "Y";
+        LambdaQueryWrapper<TjOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TjOrder::getTjNumber, tjNumber);
+        TjOrder tjOrder = tjOrderService.getOne(queryWrapper);
+        if (null != tjOrder) {
+            LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1);
+            tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0);
+            TjReportTemplate reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper);
+//            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);
+//            }
+            Integer checkStatus = tjOrder.getCheckStatus();
+            if (checkStatus == 1) {
+                if ("鎶ヨ〃".equals(reportTemplate.getPrint())) {
+                    TjReport tjReport = new TjReport();
+                    tjReport.setTjNumber(String.valueOf(tjNumber));
+                    tjReport.setPath(reportTemplate.getUrl() + "?tjNum=" + tjNumber);
+                    tjReport.setType("浣撴鎶ュ憡");
+                    tjReport.setPrint("鎶ヨ〃");
+                    tjReportService.save(tjReport);
+                    //淇敼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);
+                    return AjaxResult.success("宸茬敓鎴愭姤鍛婏紒鍙洿鎺ョ偣鍑婚瑙堬紒");
+                }
+                String hisRegistrationId = tjOrder.getCardId();
+                Date createTime = tjOrder.getCreateTime();
+                Date finishTime = tjOrder.getFinishTime();
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                String ksrq = dateFormat.format(createTime);
+                String jsrq = dateFormat.format(new Date());
+                HashMap<String, Object> params = new HashMap<>();
+                params.put("his_registration_id", hisRegistrationId);
+                params.put("ksbm", "");
+                params.put("pationid", "");
+                params.put("ksrq", ksrq);
+                params.put("jsrq", jsrq);
+                params.put("pagecount", 100);
+                params.put("page", 1);
+                LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>();
+                wq1.eq(TjCustomer::getCusId, tjOrder.getUserId());
+                TjCustomer tjCustomer = tjCustomerService.getOne(wq1);
+                try {
+                    AjaxResult ajaxResult = hisPDFUtil.hisPDF(tjOrder, tjCustomer, reportTemplate);
+                    if (!ajaxResult.get("code").toString().equals("200")) {
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    } else {
+                        Long userId = tjCustomer.getCusId();
+                        String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "_鎶ュ憡.pdf";
+                        TjReport tjReport = new TjReport();
+                        tjReport.setTjNumber(String.valueOf(tjNumber));
+                        tjReport.setPath(urlValue + outputFileName1);
+                        String outputPath1 = value + "\\";
+                        String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
+                        tjReport.setReport(pdfBinary);
+                        tjReport.setType("浣撴鎶ュ憡");
+                        tjReport.setPrint("pdf");
+                        tjReportService.save(tjReport);
+                        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);
+                    }
+                    return ajaxResult;
+                } catch (Exception e) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    e.printStackTrace();
+                    // 璋冪敤鎾ら攢
+//                    tjReportController.backOnlyCheckType(tjNumber);
+                    logger.error("鐢熸垚鎶ュ憡寮傚父");
+                    return AjaxResult.error("鐢熸垚鎶ュ憡澶辫触");
+                }
+            } else {
+                return AjaxResult.error("璇峰厛鎬绘");
+            }
+        }
+        return AjaxResult.error();
+    }
+
+
+
+    /**
+     * 鎾ら攢
+     * @param tjNumber
+     */
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
+    public void backOnlyCheckType(String tjNumber) {
+        QueryWrapper<TjOrder> wq2 = new QueryWrapper<>();
+        wq2.eq("tj_number", tjNumber);
+        TjOrder one = tjOrderService.getOne(wq2);
+        one.setCheckStatus(0);
+        String config = configService.selectConfigByKey("tj_confirm");
+        if ("Y".equals(config)) {
+            one.setStatus(TjConstants.TJ_CHECK);
+        } else {
+            one.setStatus(TjConstants.TJ_CONFIRM);
+        }
+        //灏嗙姸鎬佹敼涓烘湭瀹℃牳
+        tjOrderService.updateById(one);
     }
 
     private AjaxResult newFun(String tjNumber) {
@@ -464,7 +611,7 @@
                     for (String key : data.keySet()) {
                         form.setField(key, data.get(key).toString());
                     }
-                    System.out.println("pdf濉厖琛ㄥ崟鏁版嵁鑰楁椂锛�"+(System.currentTimeMillis() - pdfMkStart));
+                    System.out.println("pdf濉厖琛ㄥ崟鏁版嵁鑰楁椂锛�" + (System.currentTimeMillis() - pdfMkStart));
                     //璁剧疆涓烘棤娉曠紪杈�
                     ps.setFormFlattening(true);
                     ps.close();
@@ -533,8 +680,8 @@
                         }
                     }
                     long fujianEnd = System.currentTimeMillis();
-                    System.out.println("闄勪欢鏌ヨ鑰楁椂锛�"+(fujianEnd - fujianStart));
-                    System.out.println("鏂囦欢淇濆瓨鍓嶈�楁椂锛�"+(fujianEnd - pdfMkStart));
+                    System.out.println("闄勪欢鏌ヨ鑰楁椂锛�" + (fujianEnd - fujianStart));
+                    System.out.println("鏂囦欢淇濆瓨鍓嶈�楁椂锛�" + (fujianEnd - pdfMkStart));
                     // 淇濆瓨pdf鏂囦欢
                     copy.close();
                     String outputPath1 = value + "\\";
@@ -648,12 +795,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();
@@ -1261,7 +1404,7 @@
                     e.printStackTrace();
                     return AjaxResult.success("PDF瀵煎嚭澶辫触");
                 } finally {
-                    transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjOrder.getCardId());
+//                    transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjOrder.getCardId());
                 }
             }
         }
@@ -1313,9 +1456,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;
     }
 
@@ -1325,36 +1466,12 @@
         //鍒涘缓map 閿负鐖堕」鐩�  鍊间负瀛愰」鐩泦鍚�
         Map<TjOrderRemark, List<TjPdfVO>> printReport = new LinkedHashMap<>();
         //鏌ュ埌璇ュ鎴风殑浣撴璁板綍
-//        LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
-//        wq1.eq(TjOrder::getTjNumber, tjNumber);
-//        TjOrder one = tjOrderService.getOne(wq1);
 
         //鎷垮埌浣撴璁板綍鐨刼rderid锛屾煡鍑洪」鐩缁嗕俊鎭�
-//        LambdaQueryWrapper<TjOrderDetail> wq = new LambdaQueryWrapper<>();
-//        wq.eq(TjOrderDetail::getOrderId, one.getOrderId());
-//        //20230323鍒ゆ柇椤圭洰宸叉
-//        wq.ne(TjOrderDetail::getTjStatus, 0);
-//        wq.eq(TjOrderDetail::getProId,projectService.getHuaYanProId());
-//        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.list(wq);
-        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.addHuaYanTable(tjNumber);
-        //閬嶅巻浣撴璁板綍 灏嗛」鐩殑鍏蜂綋淇℃伅
-        //閬嶅巻瀹㈡埛鎵�閫夌殑椤圭洰(鍖呭惈瀛愰」鐖堕」)
-//        for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
-//            TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
-//            if (null != tjProject) {
-//                tjOrderDetail.setProject(tjProject);
-//            }
-//        }
 
-//        LambdaQueryWrapper<TjCustomer> wq22 = new LambdaQueryWrapper<>();
-//        wq22.eq(TjCustomer::getCusId, one.getUserId());
-//        TjCustomer customer = tjCustomerService.getOne(wq22);
-//        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
-//        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
-//        wqq.eq(TjOrderRemark::getDeptId,"241");
-//        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
-        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.addHuaYanTable(tjNumber);
+        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.addHuaYanAndCgTable(tjNumber);
 
+        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.addHuaYanAndCgTable(tjNumber);
         for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
             printReport.put(tjOrderRemark, null);
         }
@@ -1362,7 +1479,7 @@
         for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
             List<TjPdfVO> tjPdfVOS = new ArrayList<>();
             for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
-                if (entry.getKey().getProId().equals(tjOrderDetail.getProId())) {
+                if (entry.getKey().getProsId().equals(tjOrderDetail.getProsId())) {
                     TjPdfVO tjPdfVO = new TjPdfVO();
                     tjPdfVO.setProName(tjOrderDetail.getProName());
                     if (null != tjOrderDetail.getYcbz() && !tjOrderDetail.getYcbz().equals("")) {
@@ -1377,7 +1494,7 @@
                 }
             }
             printReport.put(entry.getKey(), tjPdfVOS);
-            if (tjPdfVOS.size() == 0) {
+            if (tjPdfVOS.isEmpty()) {
                 toRemoveKeys.add(entry.getKey());
             }
         }
@@ -1467,7 +1584,7 @@
         });
         List<Long> proIds = tjOrderDetails.stream().map(TjOrderDetail::getProId).collect(Collectors.toList());
         LambdaQueryWrapper<TjProject> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(TjProject::getProId,proIds);
+        queryWrapper.in(TjProject::getProId, proIds);
         List<TjProject> projectList = projectService.list(queryWrapper);
         for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
             TjProject tjProject = projectList.stream().filter(item -> item.getProId().equals(tjOrderDetail.getProId())).collect(Collectors.toList()).get(0);
@@ -1478,11 +1595,11 @@
                 System.out.println("'''''''''''''''''''''''''''''''''''" + tjOrderDetail.getOrderDetailId());
             }
             // 鍒ゆ柇鍦╟ollect涓槸鍚﹀瓨鍦�
-            if (collect.contains(tjOrderDetail.getProject().getProParentId())){
+            if (collect.contains(tjOrderDetail.getProject().getProParentId())) {
                 LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>();
                 wq6.eq(TjStandard::getProId, tjOrderDetail.getProId());
                 List<TjStandard> list2 = tjStandardService.list(wq6);
-                if (list2.size() == 0) {
+                if (list2.isEmpty()) {
                     TjStandard s = new TjStandard();
                     s.setCompany(" ");
                     s.setTjStandardLtValue(" ");
@@ -1532,9 +1649,9 @@
                 tjPdfVOS.add(tjPdfVO);
             }
         }
-        printReport.entrySet().stream().forEach(item->{
+        printReport.entrySet().stream().forEach(item -> {
             List<TjPdfVO> pdfVOS = hashMap.get(item.getKey().getProId());
-            printReport.put(item.getKey(),pdfVOS);
+            printReport.put(item.getKey(), pdfVOS);
         });
     }
 
@@ -1563,7 +1680,6 @@
     }
 
 
-    //TODO 鎵归噺浣跨敤post
     @GetMapping("/preview/{flag}/{TjNumber}")
     @ApiOperation(value = "涓嬭浇浣撴鎶ュ憡")
     public void preview(HttpServletResponse response, @PathVariable("flag") boolean flag, @PathVariable("TjNumber") String tjNumber) {
@@ -1652,12 +1768,252 @@
         }
     }
 
+    @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());
+        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}")
     @ApiOperation(value = "鎾ら攢鐢熸垚浣撴鎶ュ憡")
     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