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 | 1207 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 1,093 insertions(+), 114 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 914a6e3..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
@@ -5,6 +5,7 @@
 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;
@@ -21,6 +22,7 @@
 import com.itextpdf.text.pdf.draw.LineSeparator;
 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;
@@ -31,15 +33,17 @@
 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;
@@ -92,9 +96,10 @@
     private ISysDictDataService dictDataService;
     @Resource
     private ITbTransitionService transitionService;
-
     @Autowired
     private ITjBigPositiveService tjBigPositiveService;
+    @Autowired
+    private HisPDFUtil hisPDFUtil;
 
     @GetMapping("/savePdf")
     @ApiOperation(value = "浠庢湰鍦板瓨鍌ㄦā鏉垮埌鏁版嵁搴�")
@@ -108,7 +113,7 @@
         tem.setFlag("1");
         tem.setOpen("0");
         final boolean save = reportTemplateService.save(tem);
-        if(save){
+        if (save) {
             return AjaxResult.success("淇濆瓨鎴愬姛");
         }
         return AjaxResult.success("淇濆瓨澶辫触");
@@ -259,11 +264,680 @@
 //        return toAjax(tjReportService.deleteTjReportByReIds(reIds));
 //    }*/
 
+    @Autowired
+    private TjCheckController tjCheckController;
+
     @GetMapping("/toPdf/{TjNumber}")
     @ApiOperation(value = "鎵撳嵃浣撴鎶ュ憡涓簆df")
     @Transactional
     public AjaxResult toPdf(@PathVariable("TjNumber") @ApiParam(value = "浣撴鍙�") String tjNumber) {
+        AjaxResult error = null;
+        // 涔嬪墠鐨勪唬鐮� 浼樺寲閫熷害
+//        System.out.println("----------------------------------oldFun寮�濮�-------------------------------------------------------");
+//        error = oldFun(tjNumber);
+//        System.out.println("--------------------------------------缁撴潫---------------------------------------------------");
+        // 鎾ら攢鎿嶄綔
+//        revocationReport(tjNumber);
+//        鏍规嵁鏌愪汉tj鍙蜂互鍙奝roId杩涜鎵撳嵃鍓嶇殑璇锋眰
+//        tjCheckController.getTjdetailList(tjNumber,null,1);
+//        List<UpdateOrderRemarkVo> updateOrderRemarkVos = new ArrayList<>();
+//        UpdateOrderRemarkVo remarkVo = new UpdateOrderRemarkVo();
+//        remarkVo.setRemarks("鏈寮傚父");
+//        remarkVo.setTjNumber("02132240308102232");
+//        remarkVo.setProId("1633660948860522555");
+//        updateOrderRemarkVos.add(remarkVo);
+//        tjCheckController.checkUpdateOrderRemark(updateOrderRemarkVos);
+//        System.out.println("---------------------------------------newFun寮�濮�--------------------------------------------------");
+        // 浠ュ墠娴嬭瘯pdf鏂规硶
+//        error = newFun(tjNumber);
+//        System.out.println("-------------------------------------------缁撴潫----------------------------------------------");
+        // 鎾ら攢
+//        revocationReport(tjNumber);
+//        if (error != null) {
+//            return error;
+//        }
+//        return AjaxResult.success("璇ョ敤鎴蜂綋妫�鏈畬鎴愶紝涓嶈兘鎵撳嵃鎶ュ憡锛侊紒锛�");
+        int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber);
+        if (num > 0) {
+            return AjaxResult.error("鏈夊欢鏈熼」鐩殏涓嶈兘鐢熸垚鎶ュ憡!!!");
+        }
+        //鍒ゆ柇琛ㄤ腑鏈夋病鏈夎浣撴鎶ュ憡  涓嶈兘閲嶅鐢熸垚
+        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) {
+        long startTime = System.currentTimeMillis();
+        int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber);
+        if (num > 0) {
+            return AjaxResult.error("鏈夊欢鏈熼」鐩殏涓嶈兘鐢熸垚鎶ュ憡!!!");
+        }
+        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);
+            }
+            //鍒ゆ柇琛ㄤ腑鏈夋病鏈夎浣撴鎶ュ憡  涓嶈兘閲嶅鐢熸垚
+            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("璇ュ鎴锋姤鍛婂凡鐢熸垚锛佷笉鑳介噸澶嶇敓鎴愶紒鍙洿鎺ラ瑙堟垨鎵撳嵃锛�");
+            }
+            Integer checkStatus = tjOrder.getCheckStatus();
+            if (checkStatus == 1) {
+                //鍒ゆ柇鎶ュ憡鐢熸垚 淇濆瓨绫诲瀷 2024/2/29
+                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 template = reportTemplate.getTemplate();
+                String userId = SecurityUtils.getLoginUser().getUsername();
+                if (template == null) {
+                    return AjaxResult.error("娌℃湁璇ユā鏉�");
+                }
+                // --------浠ヤ笂-------  鏍规嵁鏁版嵁搴撲腑鐨勬ā鏉夸簩杩涘埗鏂囦欢  杞琾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());
+                //20230306鍒ゆ柇璇ラ」鐩槸鍚﹂��璐�/缂磋垂
+                wq2.isNotNull(TjOrderDetail::getFlowingWaterId);
+                //20230323鍒ゆ柇璇ラ」鐩槸鍚﹀純妫�/鏈
+//                wq2.eq(TjOrderDetail::getTjStatus,1);
+                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("C:Windows\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
+                    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());
+                    }
+                    System.out.println("pdf濉厖琛ㄥ崟鏁版嵁鑰楁椂锛�" + (System.currentTimeMillis() - pdfMkStart));
+                    //璁剧疆涓烘棤娉曠紪杈�
+                    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);
+                            }
+                        }
+                    }
+                    long fujianEnd = System.currentTimeMillis();
+                    System.out.println("闄勪欢鏌ヨ鑰楁椂锛�" + (fujianEnd - fujianStart));
+                    System.out.println("鏂囦欢淇濆瓨鍓嶈�楁椂锛�" + (fujianEnd - pdfMkStart));
+                    // 淇濆瓨pdf鏂囦欢
+                    copy.close();
+                    String outputPath1 = value + "\\";
+                    String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "new_浣撴鎶ュ憡.pdf";
+                    File file = new File(outputPath1 + outputFileName1);
+                    BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
+                    outputStream.write(finalOutPut.toByteArray());
+                    outputStream.flush();
+                    outputStream.close();
+                    document.close();
+                    finalOutPut.close();
+                    reader.close();
+                    // 淇濆瓨鏁版嵁
+                    TjReport tjReport = new TjReport();
+                    tjReport.setTjNumber(String.valueOf(tjNumber));
+                    tjReport.setPath(urlValue + outputFileName1);
+                    String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
+                    tjReport.setReport(pdfBinary);
+                    tjReport.setType("浣撴鎶ュ憡");
+                    tjReport.setPrint("pdf");
+                    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);
+                    long entTime = System.currentTimeMillis();
+                    System.out.println("PDF寮�濮嬪垱寤哄埌缁撴潫鑰楁椂锛�" + (entTime - pdfMkStart));
+                    System.out.println("鎬昏�楁椂锛�" + (entTime - startTime) + "ms");
+                    return AjaxResult.success("宸茬敓鎴愭姤鍛婏紒鍙洿鎺ョ偣鍑婚瑙堬紒");
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    return AjaxResult.success("PDF瀵煎嚭澶辫触");
+                }
+
+            }
+        }
+        return AjaxResult.success();
+    }
+
+    private void setUserInfo(String tjNumber, TjOrder tjOrder, TjCustomer tjCustomer, DictComp dictComp, List<TjOrderDetail> list, Map<String, Object> data) {
+        //濉厖鎬у埆锛氬垽鏂敺濂�
+        Long cusSex = tjCustomer.getCusSex();
+        String sex;
+        String name1;
+        String tjtype;
+        if (cusSex == 0) {
+            sex = "鐢�";
+            name1 = tjCustomer.getCusName() + "鍏堢敓";
+        } else {
+            sex = "濂�";
+            name1 = tjCustomer.getCusName() + "濂冲+";
+        }
+        data.put("name", tjCustomer.getCusName());
+        data.put("cusId", tjCustomer.getCusId());
+        data.put("name1", name1);
+        if ("1".equals(tjOrder.getTjType())) {
+            tjtype = "鍥㈤槦";
+            data.put("tjtype", tjtype);
+        } else {
+            tjtype = "涓汉";
+            data.put("tjtype", tjtype);
+        }
+        data.put("dstype", "缁熶竴");
+        data.put("sex", sex);
+        data.put("age", DateUtil.ageOfNow(tjCustomer.getCusBrithday()));
+        data.put("tjnumber", tjNumber);
+        data.put("tjdate", DateUtils.parseDateToStr("yyyy/MM/dd", tjOrder.getCreateTime()));
+        data.put("phone", tjCustomer.getCusPhone());
+        data.put("idcard", MatchUtils.hideIdCardNum(tjCustomer.getCusIdcard()));
+        data.put("num1", list.size());
+        data.put("num2", 0);
+        data.put("num3", 4);
+        if (dictComp == null) {
+            data.put("work", "鏃�");
+        } else {
+            data.put("work", dictComp.getCnName());
+        }
+    }
+
+    /**
+     * 鏍规嵁base64鐨凱DF鏂囦欢娣诲姞涓�椤�
+     *
+     * @param copy            pdf澶嶅埗瀵硅薄
+     * @param base64XinDianTu base64 pdf鏂囦欢
+     * @throws IOException
+     * @throws BadPdfFormatException
+     */
+    private void addPageByPDFBase64(PdfCopy copy, String base64XinDianTu) throws IOException, BadPdfFormatException {
+        byte[] pdfBytes = Base64.getDecoder().decode(base64XinDianTu);
+        PdfReader pdfReader = new PdfReader(pdfBytes);
+        int number = pdfReader.getNumberOfPages();
+        for (int i = 1; i <= number; i++) {
+            PdfImportedPage importedPage = copy.getImportedPage(pdfReader, i);
+            copy.addPage(importedPage);
+        }
+    }
+
+
+    private ByteArrayOutputStream setInfoPage(String userId, String tjNumber) throws IOException, DocumentException {
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        //鏂囨。瀵硅薄  瀹炵幇A4绾搁〉闈�
+        Document document = new Document(PageSize.A4);
+        PdfWriter pdfWriter = PdfWriter.getInstance(document, byteArrayOutputStream);
+        //document.setMarginMirroring(true);
+        //璁剧疆鏂囨。鐨勯〉杈硅窛灏辨槸璺濈椤甸潰杈逛笂鐨勮窛绂伙紝鍒嗗埆涓猴細宸﹁竟璺濓紝鍙宠竟璺濓紝涓婅竟璺濓紝涓嬭竟璺�
+        document.setMargins(70, 70, 40, 40);
+        //pdfWriter.setPageEvent(new MyHeaderFooter());// 椤电湁椤佃剼
+        document.open();
+        document.add(new Header("鍋ュ悍浣撴缁撴灉", "鍋ュ悍浣撴缁撴灉"));
+        Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkObjectMap = addTable(tjNumber);
+        Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkListMap = addHuaYanTable(tjNumber);
+        tjOrderRemarkObjectMap.putAll(tjOrderRemarkListMap);
+        for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : tjOrderRemarkObjectMap.entrySet()) {
+            List<TjPdfVO> value = entry.getValue();
+            LambdaQueryWrapper<TjProject> wqqq = new LambdaQueryWrapper<>();
+            wqqq.eq(TjProject::getProId, entry.getKey().getProId());
+            TjProject one11 = projectService.getOne(wqqq);
+            //鍒ゆ柇璇ラ」鐩槸鍚﹂渶瑕佹墦鍗版姤鍛�
+            if (null != one11 && "N".equals(one11.getNeedReport())) {
+                continue;
+            }
+            String titleName = null;
+            if (null != one11 && "1".equals(one11.getResultType())) {
+                titleName = one11.getProName();
+                // 璁剧疆鏍囬瀛椾綋鏍峰紡
+                Font titleFonts = PdfUtils.setFont(9);
+                Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
+                String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉"};
+                // 鑾峰彇鍒楄〃鏁版嵁
+                //璁剧疆琛ㄥご瀛椾綋鏍峰紡
+                Font headFont = PdfUtils.setFont(9);
+                // 璁剧疆姝f枃瀛椾綋鏍峰紡锛�12鍙�
+                Font textFont = PdfUtils.setFont(9);
+                //鍒涘缓琛ㄦ牸  灏嗚〃澶村瓧浣撳拰姝f枃瀛椾綋鏀捐繘鍘�
+                PdfPTable table = PdfUtils.setTable1(headFont, textFont, titles, value);
+                document.add(paragraph);
+                document.add(table);
+                //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
+                if (entry.getKey().getRemark() == null) {
+                    entry.getKey().setRemark("");
+                }
+                String remark = "澶囨敞锛�" + entry.getKey().getRemark();
+                if (entry.getKey().getRemark().length() > 50) {
+                    int j = 0;
+                    for (int i = 0; i < remark.length() / 50; i++) {
+                        String substring = remark.substring(j, j + 50);
+                        Font remarkFonts = PdfUtils.setFont(9);
+                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                        document.add(pp);
+                        j = j + 50;
+                    }
+                    if (remark.length() % 50 != 0) {
+                        String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
+                        Font remarkFonts = PdfUtils.setFont(9);
+                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                        document.add(pp);
+                    }
+                } else {
+                    Font remarkFonts = PdfUtils.setFont(9);
+                    Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
+                    document.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);
+                    document.add(df);
+                } else {
+                    String doctorName = "涓绘鍖诲笀锛�" + "鏃�";
+                    Font doctorFonts = PdfUtils.setFont(9);
+                    Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
+                    df.setAlignment(Element.ALIGN_RIGHT);
+                    document.add(df);
+
+                }
+                //鍒嗗壊绾�
+                LineSeparator objectName = new LineSeparator();
+                document.add(objectName);
+            } else {
+                if (null != one11) {
+                    titleName = one11.getProName();
+                } else {
+                    titleName = entry.getKey().getProName();
+                }
+                // 璁剧疆鏍囬瀛椾綋鏍峰紡
+                Font titleFonts = PdfUtils.setFont(9);
+                Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
+                String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"};
+                // 鑾峰彇鍒楄〃鏁版嵁
+                //璁剧疆琛ㄥご瀛椾綋鏍峰紡
+                Font headFont = PdfUtils.setFont(9);
+                // 璁剧疆姝f枃瀛椾綋鏍峰紡锛�12鍙�
+                Font textFont = PdfUtils.setFont(9);
+                //鍒涘缓琛ㄦ牸  灏嗚〃澶村瓧浣撳拰姝f枃瀛椾綋鏀捐繘鍘�
+                PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value);
+                document.add(paragraph);
+                document.add(table);
+                //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
+                if (entry.getKey().getRemark() == null) {
+                    entry.getKey().setRemark("");
+                }
+                String remark = "澶囨敞锛�" + entry.getKey().getRemark();
+                if (entry.getKey().getRemark().length() > 50) {
+                    int j = 0;
+                    for (int i = 0; i < remark.length() / 50; i++) {
+                        String substring = remark.substring(j, j + 50);
+                        Font remarkFonts = PdfUtils.setFont(9);
+                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                        document.add(pp);
+                        j = j + 50;
+                    }
+                    if (remark.length() % 50 != 0) {
+                        String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
+                        Font remarkFonts = PdfUtils.setFont(9);
+                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                        document.add(pp);
+                    }
+                } else {
+                    Font remarkFonts = PdfUtils.setFont(9);
+                    Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
+                    document.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);
+                    document.add(df);
+                } else {
+                    String doctorName = "涓绘鍖诲笀锛�" + "鏃�";
+                    Font doctorFonts = PdfUtils.setFont(9);
+                    Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
+                    df.setAlignment(Element.ALIGN_RIGHT);
+                    document.add(df);
+                }
+                //鍒嗗壊绾�
+                LineSeparator objectName = new LineSeparator();
+                document.add(objectName);
+            }
+        }
+        document.close();
+        pdfWriter.close();
+        return byteArrayOutputStream;
+    }
+
+    private AjaxResult oldFun(String tjNumber) {
+        long startTime = System.currentTimeMillis();
         int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber);
         if (num > 0) return AjaxResult.error("鏈夊欢鏈熼」鐩殏涓嶈兘鐢熸垚鎶ュ憡!!!");
         LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>();
@@ -272,36 +946,33 @@
 
         if (null != tjOrder) {
             LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            TjReportTemplate reportTemplate =null;
-            if (tjOrder.getTjCategory()!=null){
+            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){
+                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){
+                    if (one1 != null) {
                         tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue());
-                    }else {
+                    } else {
                         tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1);
                     }
-                }else {
+                } else {
                     tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1);
                 }
                 tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0);
                 reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper);
-            }else {
+            } else {
                 tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0);
                 reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2);
             }
-
-
-
 
 
             //鍒ゆ柇琛ㄤ腑鏈夋病鏈夎浣撴鎶ュ憡  涓嶈兘閲嶅鐢熸垚
@@ -317,10 +988,10 @@
             Integer checkStatus = tjOrder.getCheckStatus();
             if (checkStatus == 1) {
                 //鍒ゆ柇鎶ュ憡鐢熸垚 淇濆瓨绫诲瀷 2024/2/29
-                if ("鎶ヨ〃".equals(reportTemplate.getPrint())){
+                if ("鎶ヨ〃".equals(reportTemplate.getPrint())) {
                     TjReport tjReport = new TjReport();
                     tjReport.setTjNumber(String.valueOf(tjNumber));
-                    tjReport.setPath(reportTemplate.getUrl()+"?tjNum="+tjNumber);
+                    tjReport.setPath(reportTemplate.getUrl() + "?tjNum=" + tjNumber);
                     tjReport.setType("浣撴鎶ュ憡");
                     tjReport.setPrint("鎶ヨ〃");
                     tjReportService.save(tjReport);
@@ -336,10 +1007,9 @@
                 }
 
 
-
                 String template = reportTemplate.getTemplate();
                 String userId = SecurityUtils.getLoginUser().getUsername();
-                if (template!=null){
+                if (template != null) {
                     PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + "\\" + userId + "浣撴鎶ュ憡灏侀潰妯℃澘.pdf");
                 }
                 // --------浠ヤ笂-------  鏍规嵁鏁版嵁搴撲腑鐨勬ā鏉夸簩杩涘埗鏂囦欢  杞琾df  鍒涘缓鏂囦欢澶�  灏唒df鏀捐繘鏈湴鏂囦欢澶�
@@ -443,27 +1113,27 @@
 //                            "銆�6銆戣交饩勪腑搴﹁剛鑲倽");
 
                     //鎷兼帴閲嶅ぇ闃虫�х粨鏋�
-                    StringBuffer str=new StringBuffer();
+                    StringBuffer str = new StringBuffer();
                     str.append("銆愰噸澶ч槼鎬ч」鐩�慭n");
-                    LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper=new LambdaQueryWrapper<>();
-                    bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber,tjNumber);
+                    LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                    bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber);
                     final List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper);
-                    if(list1!=null&&list1.size()>0){
+                    if (list1 != null && list1.size() > 0) {
                         for (int i = 0; i < list1.size(); i++) {
-                            str.append((i+1)+"銆�"+list1.get(i).getProName()+";\n");
+                            str.append((i + 1) + "銆�" + list1.get(i).getProName() + ";\n");
                         }
-                    }else {
+                    } else {
                         str.append("    鏃狅紱\n");
                     }
                     //鎷兼帴寮傚父椤圭洰
                     str.append("銆愬紓甯告儏鍐甸」鐩�慭n");
-                    if(list.size()>0){
+                    if (list.size() > 0) {
                         for (int i = 0; i < list.size(); i++) {
-                            if (list.get(i).getExceptionDesc()==1){
-                                str.append((i+1)+"銆�"+projectService.getById(list.get(i).getProId()).getProName()+";\n");
+                            if (list.get(i).getExceptionDesc() == 1) {
+                                str.append((i + 1) + "銆�" + projectService.getById(list.get(i).getProId()).getProName() + ";\n");
                             }
                         }
-                    }else {
+                    } else {
                         str.append("    鏃狅紱\n");
                     }
 
@@ -487,7 +1157,7 @@
                     //璁剧疆鏂囨。鐨勯〉杈硅窛灏辨槸璺濈椤甸潰杈逛笂鐨勮窛绂伙紝鍒嗗埆涓猴細宸﹁竟璺濓紝鍙宠竟璺濓紝涓婅竟璺濓紝涓嬭竟璺�
                     document.setMargins(70, 70, 40, 40);
                     //鐢熸垚pdf鐨勪綅缃互鍙婂悕绉�
-                    String fileName = value + "\\" + userId +tjNumber+ "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf";
+                    String fileName = value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf";
                     OutputStream outputStream = Files.newOutputStream(Paths.get(fileName));
                     PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
 
@@ -507,12 +1177,12 @@
                         wqqq.eq(TjProject::getProId, entry.getKey().getProId());
                         TjProject one11 = projectService.getOne(wqqq);
                         //鍒ゆ柇璇ラ」鐩槸鍚﹂渶瑕佹墦鍗版姤鍛�
-                        if (null !=one11 && "N".equals(one11.getNeedReport())){
+                        if (null != one11 && "N".equals(one11.getNeedReport())) {
                             continue;
                         }
-                        String titleName =null;
-                        if (null !=one11 && "1".equals(one11.getResultType())) {
-                             titleName =one11.getProName();
+                        String titleName = null;
+                        if (null != one11 && "1".equals(one11.getResultType())) {
+                            titleName = one11.getProName();
                             // 璁剧疆鏍囬瀛椾綋鏍峰紡
                             Font titleFonts = PdfUtils.setFont(9);
                             Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
@@ -576,9 +1246,9 @@
                             LineSeparator objectName = new LineSeparator();
                             document.add(objectName);
                         } else {
-                            if(null !=one11){
+                            if (null != one11) {
                                 titleName = one11.getProName();
-                            }else {
+                            } else {
                                 titleName = entry.getKey().getProName();
                             }
 
@@ -661,32 +1331,32 @@
                     rtwq.eq(TjReport::getType, "蹇冪數鍥�");
                     rtwq.eq(TjReport::getTjNumber, tjNumber);
                     TjReport one1111 = tjReportService.getOne(rtwq);
-                    if(null !=one1111){
+                    if (null != one1111) {
                         String report = one1111.getReport();
-                        PDFBinaryUtil.base64StringToPDF(report, FileUtil.mkdir(value).getPath() + "\\" +tjNumber+ userId + "蹇冪數鍥�.pdf");
+                        PDFBinaryUtil.base64StringToPDF(report, FileUtil.mkdir(value).getPath() + "\\" + tjNumber + userId + "蹇冪數鍥�.pdf");
                     }
 
                     LambdaQueryWrapper<TjReport> rtwq12 = new LambdaQueryWrapper<>();
                     rtwq12.eq(TjReport::getType, "闄勪欢");
                     rtwq12.eq(TjReport::getTjNumber, tjNumber);
                     TjReport one111112 = tjReportService.getOne(rtwq12);
-                    if(null !=one111112){
+                    if (null != one111112) {
                         String report12 = one111112.getReport();
-                        PDFBinaryUtil.base64StringToPDF(report12, FileUtil.mkdir(value).getPath() + "\\" +tjNumber+ userId + "闄勪欢.pdf");
+                        PDFBinaryUtil.base64StringToPDF(report12, FileUtil.mkdir(value).getPath() + "\\" + tjNumber + userId + "闄勪欢.pdf");
                     }
 
                     //鍚堝苟
-                    String[] files1=null;
-                    if (one1111!=null ){
-                        if (one111112!=null){
-                            files1 = new String[ ]{value + "\\" + userId + "浣撴鎶ュ憡灏侀潰椤�.pdf", value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf", value + "\\" + tjNumber + userId + "闄勪欢.pdf", value + "\\" + tjNumber + userId + "蹇冪數鍥�.pdf"};
-                        }else {
-                            files1 = new String[]{value + "\\" + userId + "浣撴鎶ュ憡灏侀潰椤�.pdf", value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf",value + "\\" + tjNumber + userId + "蹇冪數鍥�.pdf"};
+                    String[] files1 = null;
+                    if (one1111 != null) {
+                        if (one111112 != null) {
+                            files1 = new String[]{value + "\\" + userId + "浣撴鎶ュ憡灏侀潰椤�.pdf", value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf", value + "\\" + tjNumber + userId + "闄勪欢.pdf", value + "\\" + tjNumber + userId + "蹇冪數鍥�.pdf"};
+                        } else {
+                            files1 = new String[]{value + "\\" + userId + "浣撴鎶ュ憡灏侀潰椤�.pdf", value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf", value + "\\" + tjNumber + userId + "蹇冪數鍥�.pdf"};
                         }
-                    }else {
-                        if (one111112!=null){
+                    } else {
+                        if (one111112 != null) {
                             files1 = new String[]{value + "\\" + userId + "浣撴鎶ュ憡灏侀潰椤�.pdf", value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf", value + "\\" + tjNumber + userId + "闄勪欢.pdf"};
-                        }else {
+                        } else {
                             files1 = new String[]{value + "\\" + userId + "浣撴鎶ュ憡灏侀潰椤�.pdf", value + "\\" + userId + tjNumber + "浣撴鎶ュ憡椤圭洰璇︽儏椤�.pdf"};
                         }
                     }
@@ -726,29 +1396,31 @@
                     updateWrapper.set(TjOrder::getDownloadLastTime, new Date());
                     updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
                     tjOrderService.update(updateWrapper);
-
+                    long entTime = System.currentTimeMillis();
+                    System.out.println(entTime - startTime + "ms");
                     return AjaxResult.success("宸茬敓鎴愭姤鍛婏紒鍙洿鎺ョ偣鍑婚瑙堬紒");
 
                 } catch (Exception e) {
                     e.printStackTrace();
                     return AjaxResult.success("PDF瀵煎嚭澶辫触");
-                }finally {
-                    transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(),tjOrder.getCardId());
+                } finally {
+//                    transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjOrder.getCardId());
                 }
             }
         }
-        return AjaxResult.success("璇ョ敤鎴蜂綋妫�鏈畬鎴愶紝涓嶈兘鎵撳嵃鎶ュ憡锛侊紒锛�");
+        return null;
     }
+
+
     //闈炲寲楠岄」鐩姤鍛�
     public Map<TjOrderRemark, List<TjPdfVO>> addTable(String tjNumber) {
         //鍒涘缓map 閿负鐖堕」鐩�  鍊间负瀛愰」鐩泦鍚�
+        // 涓嶄娇鐢╨inked
         Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
-
         //鏌ュ埌璇ュ鎴风殑浣撴璁板綍
         LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
         wq1.eq(TjOrder::getTjNumber, tjNumber);
         TjOrder one = tjOrderService.getOne(wq1);
-
 /*
         //鎷垮埌浣撴璁板綍鐨刼rderid锛屾煡鍑洪」鐩缁嗕俊鎭�
         LambdaQueryWrapper<TjOrderDetail> wq = new LambdaQueryWrapper<>();
@@ -775,17 +1447,16 @@
         TjCustomer customer = tjCustomerService.getOne(wq22);
         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","251","271");
-        wqq.notIn(TjOrderRemark::getProId,projectService.getNneedReprotProId());
+        wqq.ne(TjOrderRemark::getDeptId, "241");
+        wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257", "251", "271");
+        wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId());
         List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
 
         for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
-
-            printReport.put(tjOrderRemark,null);
+            printReport.put(tjOrderRemark, null);
         }
-
-        extracted(printReport,one, customer);
+//        extracted(printReport, one, customer);
+        extractedNew(printReport, one, customer);
         return printReport;
     }
 
@@ -793,58 +1464,39 @@
     //鍖栭獙椤圭洰鎶ュ憡
     public Map<TjOrderRemark, List<TjPdfVO>> addHuaYanTable(String tjNumber) {
         //鍒涘缓map 閿负鐖堕」鐩�  鍊间负瀛愰」鐩泦鍚�
-        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
+        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);
+            printReport.put(tjOrderRemark, null);
         }
         List<Object> toRemoveKeys = new ArrayList<>();
         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())){
-                        TjPdfVO tjPdfVO = new TjPdfVO();
-                        tjPdfVO.setProName(tjOrderDetail.getProName());
+                if (entry.getKey().getProsId().equals(tjOrderDetail.getProsId())) {
+                    TjPdfVO tjPdfVO = new TjPdfVO();
+                    tjPdfVO.setProName(tjOrderDetail.getProName());
+                    if (null != tjOrderDetail.getYcbz() && !tjOrderDetail.getYcbz().equals("")) {
+                        tjPdfVO.setProResult(tjOrderDetail.getProResult() + " [" + tjOrderDetail.getYcbz() + "]");
+                    } else {
                         tjPdfVO.setProResult(tjOrderDetail.getProResult());
-                        tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
-                        tjPdfVO.setStandardValue(tjOrderDetail.getStanId());
-                        tjPdfVO.setCompany(tjOrderDetail.getProAdvice());
-                        tjPdfVOS.add(tjPdfVO);
                     }
+                    tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
+                    tjPdfVO.setStandardValue(tjOrderDetail.getStanId());
+                    tjPdfVO.setCompany(tjOrderDetail.getProAdvice());
+                    tjPdfVOS.add(tjPdfVO);
+                }
             }
             printReport.put(entry.getKey(), tjPdfVOS);
-            if(tjPdfVOS.size()==0)
-            {toRemoveKeys.add(entry.getKey());}
+            if (tjPdfVOS.isEmpty()) {
+                toRemoveKeys.add(entry.getKey());
+            }
         }
         toRemoveKeys.forEach(printReport::remove);
         return printReport;
@@ -854,7 +1506,9 @@
         for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
             List<TjPdfVO> tjPdfVOS = new ArrayList<>();
 //            TjOrder one = tjOrderService.getOrderByTjNum(entry.getKey().getTjNumber());
-            List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(),entry.getKey().getProId());
+            System.out.println(one.getOrderId() + " " + entry.getKey().getProId());
+            List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(), entry.getKey().getProId());
+            System.out.println("tjOrderDetails = " + tjOrderDetails);
             for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
                 TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
                 if (null != tjProject) {
@@ -920,31 +1574,110 @@
         }
     }
 
+    private void extractedNew(Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
+        List<Long> collect = printReport.entrySet().stream().map(item -> item.getKey().getProId()).collect(Collectors.toList());
+        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParIds(one.getOrderId(), collect);
+        Set<String> strings = tjOrderDetails.stream().map(item -> item.getUpdateBy().split(",")[1]).collect(Collectors.toSet());
+        HashMap<Long, List<TjPdfVO>> hashMap = new HashMap<>();
+        strings.forEach(item -> {
+            hashMap.put(Long.parseLong(item), new ArrayList<TjPdfVO>());
+        });
+        List<Long> proIds = tjOrderDetails.stream().map(TjOrderDetail::getProId).collect(Collectors.toList());
+        LambdaQueryWrapper<TjProject> queryWrapper = new LambdaQueryWrapper<>();
+        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);
+            if (null != tjProject) {
+                tjOrderDetail.setProject(tjProject);
+            }
+            if (null == tjOrderDetail.getProject()) {
+                System.out.println("'''''''''''''''''''''''''''''''''''" + tjOrderDetail.getOrderDetailId());
+            }
+            // 鍒ゆ柇鍦╟ollect涓槸鍚﹀瓨鍦�
+            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.isEmpty()) {
+                    TjStandard s = new TjStandard();
+                    s.setCompany(" ");
+                    s.setTjStandardLtValue(" ");
+                    s.setTjStandardGtValue(" ");
+                    tjOrderDetail.setStandard(s);
+                } else if (list2.size() == 1) {
+                    tjOrderDetail.setStandard(list2.get(0));
+                } else {
+                    Long cusSex = customer.getCusSex();
+                    Date cusBrithday = customer.getCusBrithday();
+                    int age = DateUtil.ageOfNow(cusBrithday);
+                    for (TjStandard tjStandard : list2) {
+                        LambdaQueryWrapper<TjStandard> wq8 = new LambdaQueryWrapper<>();
+                        if (tjStandard.getTjSex() != null) {
+                            wq8.eq(TjStandard::getTjSex, cusSex);
+                        }
+                        if (tjStandard.getTjType() != null) {
+                            wq8.eq(TjStandard::getTjType, StringUtils.getAgeType(age));
+                        }
+                        TjStandard standard = tjStandardService.getOne(wq8);
+                        tjOrderDetail.setStandard(standard);
+                    }
+                }
+                TjPdfVO tjPdfVO = new TjPdfVO();
+                tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
+                tjPdfVO.setProResult(tjOrderDetail.getProResult());
+                tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
+                if (tjOrderDetail.getStandard() != null) {
+                    //鍗曚綅
+                    if (tjOrderDetail.getStandard().getCompany() == null) {
+                        tjPdfVO.setCompany(" ");
+                    } else {
+                        tjPdfVO.setCompany(tjOrderDetail.getStandard().getCompany());
+                    }
+                    //鏈�澶у�煎拰鏈�灏忓��
+                    String tjStandardGtValue = tjOrderDetail.getStandard().getTjStandardGtValue();
+                    String tjStandardLtValue = tjOrderDetail.getStandard().getTjStandardLtValue();
+                    if (tjStandardGtValue == null) {
+                        tjStandardGtValue = " ";
+                    }
+                    if (tjStandardLtValue == null) {
+                        tjStandardLtValue = " ";
+                    }
+                    tjPdfVO.setStandardValue(tjStandardLtValue + "-" + tjStandardGtValue);
+                }
+                List<TjPdfVO> tjPdfVOS = hashMap.get(Long.parseLong(tjOrderDetail.getUpdateBy().split(",")[1]));
+                tjPdfVOS.add(tjPdfVO);
+            }
+        }
+        printReport.entrySet().stream().forEach(item -> {
+            List<TjPdfVO> pdfVOS = hashMap.get(item.getKey().getProId());
+            printReport.put(item.getKey(), pdfVOS);
+        });
+    }
 
     @GetMapping("/isPdfOrJimu")
     @ApiOperation(value = "鍒ゆ柇鎶ュ憡鎵撳紑绫诲瀷")
     public AjaxResult isPdfOrJimu(String tjNumber) {
-        Map<String,String> res=new HashMap<>();
+        Map<String, String> res = new HashMap<>();
         LambdaQueryWrapper<TjReport> we = new LambdaQueryWrapper<>();
         we.eq(TjReport::getTjNumber, tjNumber);
         we.eq(TjReport::getType, "浣撴鎶ュ憡");
         TjReport one = tjReportService.getOne(we);
-        if (one==null){
+        if (one == null) {
             return AjaxResult.error("鏆傛棤浣撴鎶ュ憡");
         }
-        if ("pdf".equals(one.getPrint())){
-            res.put("flag","0");
+        if ("pdf".equals(one.getPrint())) {
+            res.put("flag", "0");
             return AjaxResult.success(res);
-        }else if ("鎶ヨ〃".equals(one.getPrint())){
-            res.put("flag","1");
-            res.put("url",one.getPath());
+        } else if ("鎶ヨ〃".equals(one.getPrint())) {
+            res.put("flag", "1");
+            res.put("url", one.getPath());
             return AjaxResult.success(res);
-        }else {
+        } else {
             return AjaxResult.error("鏆傛棤浣撴鎶ュ憡");
         }
 
     }
-
 
 
     @GetMapping("/preview/{flag}/{TjNumber}")
@@ -1035,16 +1768,262 @@
         }
     }
 
+    @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", "浣撴鎶ュ憡");
-        if (null != tjReportService.getOne(wq1)) {
-            if (!tjReportService.remove(wq1)) {
+        TjReport tjReport = tjReportService.getOne(wq1);
+        if (null != tjReport) {
+//            if (!tjReportService.remove(wq1)) {
+//                return AjaxResult.error("鎾ゅ洖澶辫触锛�");
+//            }
+            // 涓嶅湪浣跨敤閫昏緫鍒犻櫎 閫昏緫鍒犻櫎瀵艰嚧鎵撳嵃鎶ュ憡鐢熸垚 鏌ヨsql缂撴參
+            int i = tjReportService.deleteTjReportByReId(tjReport.getReId());
+            if (i == 0) {
                 return AjaxResult.error("鎾ゅ洖澶辫触锛�");
             }
         }
@@ -1572,18 +2551,18 @@
     @GetMapping("/reportHistory")
     @ApiOperation(value = "鍘嗗彶鎶ュ憡")
     public AjaxResult reportHistory(Long cusId) {
-        List<TjReport> res=new ArrayList<>();
+        List<TjReport> res = new ArrayList<>();
         LambdaQueryWrapper<TjOrder> wqq = new LambdaQueryWrapper<>();
         wqq.like(TjOrder::getUserId, cusId);
         List<TjOrder> orderList = tjOrderService.list(wqq);
-        if (orderList!=null && orderList.size()>0){
+        if (orderList != null && orderList.size() > 0) {
             for (TjOrder tjOrder : orderList) {
-                if (tjOrder!=null){
+                if (tjOrder != null) {
                     LambdaQueryWrapper<TjReport> wq = new LambdaQueryWrapper<>();
                     wq.eq(TjReport::getTjNumber, tjOrder.getTjNumber());
-                    wq.eq(TjReport::getType,"浣撴鎶ュ憡");
+                    wq.eq(TjReport::getType, "浣撴鎶ュ憡");
                     TjReport one = tjReportService.getOne(wq);
-                    if(null !=one){
+                    if (null != one) {
                         res.add(one);
                     }
                 }

--
Gitblit v1.8.0