From 97aedb4847564343dd5570d8dcd34fe732694c89 Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期三, 29 五月 2024 18:01:12 +0800 Subject: [PATCH] 批量生成体检报告 --- ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 298 insertions(+), 2 deletions(-) diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java index f74400a..efa15f4 100644 --- a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjReportServiceImpl.java @@ -1,11 +1,11 @@ package com.ltkj.hosp.service.impl; -import java.io.File; -import java.io.OutputStream; +import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; import java.util.List; +import java.util.stream.Collectors; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; @@ -18,7 +18,9 @@ import com.itextpdf.text.pdf.*; import com.itextpdf.text.pdf.draw.LineSeparator; import com.ltkj.common.core.domain.AjaxResult; +import com.ltkj.common.core.domain.entity.SysDictData; import com.ltkj.common.utils.DateUtils; +import com.ltkj.common.utils.PDFDocumentUtil; import com.ltkj.common.utils.SecurityUtils; import com.ltkj.common.utils.pdfutils.MergePdf; import com.ltkj.common.utils.pdfutils.MyHeaderFooter; @@ -26,10 +28,13 @@ import com.ltkj.common.utils.pdfutils.PdfUtils; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.service.*; +import com.ltkj.mall.mallOrderUtils.TjConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.ltkj.hosp.mapper.TjReportMapper; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; @@ -509,4 +514,295 @@ } return table; } + + + @Override + @Transactional + public AjaxResult makeBatchReport(List<String> tjNumbers) { + return sqlGetReportToMake(tjNumbers); + } + + /** + * 閫氳繃sql 鐩存帴鏌ユ姤鍛奲ase64杩涜鏁村悎杩斿洖 + * 濡傛灉sql鏁版嵁閲忓法澶� 鏌ヨ缂撴參 鍙互璇曡瘯 makeReport(List<String > tjNumbers)宸叉敞閲� + * @param tjNumbers + * @return + */ + private AjaxResult sqlGetReportToMake(List<String> tjNumbers) { + LambdaQueryWrapper<TjReport> tjReportLambdaQueryWrapper = new LambdaQueryWrapper<>(); + tjReportLambdaQueryWrapper.in(TjReport::getTjNumber, tjNumbers); + List<TjReport> list = tjReportService.list(tjReportLambdaQueryWrapper); + ArrayList<String> base64Pdfs = new ArrayList<>(); + for (TjReport report : list) { + if (report == null || report.getReport() == null) { + // 娌℃湁璇ユ姤鍛� 鐩存帴璺宠繃 + continue; + } + base64Pdfs.add(report.getReport()); + } + tjNumbers.forEach(tjNumber ->{ + LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(TjOrder::getTjNumber, tjNumber); + updateWrapper.set(TjOrder::getPrintLastTime, new Date()); + updateWrapper.set(TjOrder::getDownloadLastTime, new Date()); + updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END); + tjOrderService.update(updateWrapper); + }); + try { + byte[] mergePDF = PDFDocumentUtil.mergePDFs(base64Pdfs); + String s = Base64.getEncoder().encodeToString(mergePDF); + return AjaxResult.success().put("file",s); + // 鏈湴鐢熸垚娴嬭瘯 +// String PDF_FILE = "d:\\Users\\w\\Desktop\\test.pdf"; +// BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(PDF_FILE)); +// outputStream.write(mergePDF); +// outputStream.flush(); +// outputStream.close(); + } catch (DocumentException | IOException e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error("鎵归噺鐢熸垚澶辫触"); + } + } + + /** + * 閫氳繃sql 閲嶆暣鏁版嵁妯℃澘 鍏ㄩ儴閲嶆柊鐢熸垚 + * @param tjNumbers + * @return + */ +// private AjaxResult makeReport(List<String > tjNumbers) { +// ArrayList<String> base64Pdfs = new ArrayList<>(); +// for (String tjNumber : tjNumbers) { +// LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); +// wq.eq(TjOrder::getTjNumber, tjNumber); +// TjOrder tjOrder = tjOrderService.getOne(wq); +// if (null != tjOrder) { +// LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// TjReportTemplate reportTemplate = null; +// if (tjOrder.getTjCategory() != null) { +// //鏌ヨ瀛楀吀 +// LambdaQueryWrapper<SysDictData> wqq = new LambdaQueryWrapper<>(); +// wqq.eq(SysDictData::getDictType, "dict_tjtype"); +// wqq.eq(SysDictData::getDictValue, tjOrder.getTjCategory()); +// SysDictData one = dictDataService.getOne(wqq); +// if (one != null) { +// //鏌ヨ瀛楀吀 +// LambdaQueryWrapper<SysDictData> wqq1 = new LambdaQueryWrapper<>(); +// wqq1.eq(SysDictData::getDictType, "report_template_type"); +// wqq1.eq(SysDictData::getDictLabel, one.getDictLabel()); +// SysDictData one1 = dictDataService.getOne(wqq1); +// if (one1 != null) { +// tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue()); +// } else { +// tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); +// } +// } else { +// tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); +// } +// tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); +// reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); +// } else { +// tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); +// reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2); +// } +// +// String template = reportTemplate.getTemplate(); +// String userId = null; +// if (template == null) { +// // 娌℃湁璇ユā鏉� +// continue; +// } +// // --------浠ヤ笂------- 鏍规嵁鏁版嵁搴撲腑鐨勬ā鏉夸簩杩涘埗鏂囦欢 杞琾df 鍒涘缓鏂囦欢澶� 灏唒df鏀捐繘鏈湴鏂囦欢澶� +// LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>(); +// wq1.eq(TjCustomer::getCusId, tjOrder.getUserId()); +// TjCustomer tjCustomer = tjCustomerService.getOne(wq1); +// LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>(); +// wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId()); +// DictComp dictComp = dictCompService.getOne(wq111); +// LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>(); +// wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId()); +// wq2.isNotNull(TjOrderDetail::getFlowingWaterId); +// List<TjOrderDetail> list = tjOrderDetailService.list(wq2); +// for (TjOrderDetail tjOrderDetail : list) { +// TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); +// tjOrderDetail.setProject(tjProject); +// } +// // 鍏辫鑰楁椂5695姣 浠ヤ笅浠g爜鑰楁椂3528 +// // TODO PDF鍒涘缓浼樺寲 +// long pdfMkStart = System.currentTimeMillis(); +// ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); +// PdfStamper ps = null; +// PdfReader reader = null; +// try { +// // 璇诲叆pdf琛ㄥ崟 +// reader = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template))); +// // 鏍规嵁琛ㄥ崟鐢熸垚涓�涓柊鐨刾df +// ps = new PdfStamper(reader, byteArrayOutputStream); +// // 鑾峰彇pdf琛ㄥ崟 +// AcroFields form = ps.getAcroFields(); +// //璇ュ瓧浣撻�犳垚绫诲瀷涓嶅潎鍖�锛屼絾鏄痯df杞浘鐗囦笉涔辩爜 +// BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); +// form.addSubstitutionFont(bf); +// // 濉厖鏁版嵁缁欒〃鏍� +// Map<String, Object> data = new HashMap<>(); +// // 璁剧疆鐢ㄦ埛淇℃伅 +// setUserInfo(tjNumber, tjOrder, tjCustomer, dictComp, list, data); +// //灏侀潰椤典笅闈㈢殑鎬绘寤鸿鏄剧ず +// if (tjOrder.getCheckAdvice() == null) { +// data.put("remark", "鏃�"); +// } else { +// data.put("remark", tjOrder.getCheckAdvice()); +// } +// //灏侀潰椤典笅闈㈢殑鎬绘寤鸿鏄剧ず +// if (tjOrder.getCheckDoctor() == null) { +// data.put("docname", "鏃�"); +// } else { +// data.put("docname", tjOrder.getCheckDoctor()); +// } +// //寮傚父椤圭洰 +//// data.put("yichang", "銆�1銆戝眻鍏変笉姝n" + +//// "銆�2銆戞墎妗冧綋鑲モ激\n" + +//// "銆�3銆戜綋閲嶆寚鏁板饩糪n" + +//// "銆�4銆戔編鑴傚紓甯革紙鎬昏儐鍥洪唶澧炩炯锛涒舰娌逛笁閰饩硷級\n" + +//// "銆�5銆懳�-饩曟皑閰拌浆绉婚叾澧炩炯锛涘ぉ饣斿啲姘ㄩ吀姘ㄥ熀杞Щ閰跺饩硷紱涓欐皑閰告皑鍩鸿浆绉婚叾澧炩炯\n" + +//// "銆�6銆戣交饩勪腑搴﹁剛鑲倽"); +// +// //鎷兼帴閲嶅ぇ闃虫�х粨鏋� +// StringBuffer str = new StringBuffer(); +// str.append("銆愰噸澶ч槼鎬ч」鐩�慭n"); +// LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber); +// final List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper); +// if (list1 != null && list1.size() > 0) { +// for (int i = 0; i < list1.size(); i++) { +// str.append(i + 1).append("銆�").append(list1.get(i).getProName()).append(";\n"); +// } +// } else { +// str.append(" 鏃狅紱\n"); +// } +// //鎷兼帴寮傚父椤圭洰 +// str.append("銆愬紓甯告儏鍐甸」鐩�慭n"); +// if (list.size() > 0) { +//// for (int i = 0; i < list.size(); i++) { +//// if (list.get(i).getExceptionDesc() == 1) { +//// str.append(i + 1).append("銆�").append(projectService.getById(list.get(i).getProId()).getProName()).append(";\n"); +//// } +//// } +// int[] index = {0}; +// List<TjOrderDetail> collect = list.stream() +// .filter(item -> item.getExceptionDesc() == 1).collect(Collectors.toList()); +// if (collect.isEmpty()) { +// str.append(" 鏃狅紱\n"); +// } else { +// collect.forEach(item -> str.append(index[0]++ + 1).append("銆�").append(projectService.getById(item.getProId()).getProName()).append(";\n")); +// } +// } else { +// str.append(" 鏃狅紱\n"); +// } +// //寮傚父椤圭洰 +// data.put("yichang", str.toString()); +// // 閬嶅巻data 缁檖df琛ㄥ崟琛ㄦ牸璧嬪�� +// for (String key : data.keySet()) { +// form.setField(key, data.get(key).toString()); +// } +// //璁剧疆涓烘棤娉曠紪杈� +// ps.setFormFlattening(true); +// ps.close(); +// reader.close(); +// // 灏嗕慨鏀瑰悗鐨凱DF鍐呭鍐欏叆 +// byte[] bytes = byteArrayOutputStream.toByteArray(); +// // 鍒涘缓鏂扮殑PDF鏂囨。 +// Document document = new Document(PageSize.A4); +// ByteArrayOutputStream finalOutPut = new ByteArrayOutputStream(); +// PdfCopy copy = new PdfCopy(document, finalOutPut); +// document.open(); +// reader = new PdfReader(bytes); +// int numberOfPages = reader.getNumberOfPages(); +// for (int i = 1; i <= numberOfPages; i++) { +// PdfImportedPage page = copy.getImportedPage(reader, i); +// copy.addPage(page); +// } +// // 娣诲姞璇︽儏椤� +// document.newPage(); +// reader.close(); +// ByteArrayOutputStream infoByteArrayOutputStream = setInfoPage(userId, tjNumber); +// reader = new PdfReader(infoByteArrayOutputStream.toByteArray()); +// int numberOfPages1 = reader.getNumberOfPages(); +// for (int i = 1; i <= numberOfPages1; i++) { +// PdfImportedPage page = copy.getImportedPage(reader, i); +// copy.addPage(page); +// } +// infoByteArrayOutputStream.close(); +// // 蹇冪數鍥句互鍙婇檮浠� +// // 鍥犳暟鎹簱琛ㄥ瓨鏀綽ase64瀵艰嚧鏌ヨ缂撴參 杩欓噷鎵ц缂撴參 +// // 鍦ㄨ繖閲屽鍔犱竴鏉℃煡璇ount 瀵逛簬娌℃湁杩藉姞闄勪欢鐨� 鎻愬崌閫熷害 +// long fujianStart = System.currentTimeMillis(); +// LambdaQueryWrapper<TjReport> queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.eq(TjReport::getTjNumber, tjNumber) +// .and(item -> item.eq(TjReport::getType, "闄勪欢").or().eq(TjReport::getType, "蹇冪數鍥�")); +// Integer selectCount = tjReportService.getSelectCount(queryWrapper); +// if (selectCount > 0) { +// String base64XinDianTu = null; +// String base64FuJian = null; +// List<TjReport> reportList = tjReportService.list(queryWrapper); +// TjReport xinDianTu = null; +// TjReport fuJian = null; +// if (!reportList.isEmpty()) { +// for (TjReport tjReport : reportList) { +// if ("闄勪欢".equals(tjReport.getType())) { +// fuJian = tjReport; +// base64FuJian = fuJian.getReport(); +// } else { +// xinDianTu = tjReport; +// base64XinDianTu = xinDianTu.getReport(); +// } +// } +// } +// if (xinDianTu != null) { +// if (fuJian != null) { +// addPageByPDFBase64(copy, base64FuJian); +// document.newPage(); +// addPageByPDFBase64(copy, base64XinDianTu); +// } else { +// addPageByPDFBase64(copy, base64XinDianTu); +// } +// } else { +// if (fuJian != null) { +// addPageByPDFBase64(copy, base64FuJian); +// } +// } +// } +// copy.close(); +// base64Pdfs.add(Base64.getEncoder().encodeToString(finalOutPut.toByteArray())); +// document.close(); +// finalOutPut.close(); +// reader.close(); +// //淇敼order琛ㄤ腑鐨勬墦鍗版姤鍛婃椂闂翠负褰撳墠鏃堕棿 +// LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>(); +// updateWrapper.eq(TjOrder::getTjNumber, tjNumber); +// updateWrapper.set(TjOrder::getReportTime, new Date()); +// updateWrapper.set(TjOrder::getPrintLastTime, new Date()); +// updateWrapper.set(TjOrder::getDownloadLastTime, new Date()); +// updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END); +// tjOrderService.update(updateWrapper); +// } catch (Exception e) { +// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); +// e.printStackTrace(); +// } +// } +// } +// try { +// byte[] mergePDFs = PDFDocumentUtil.mergePDFs(base64Pdfs); +// // 鏈湴鐢熸垚娴嬭瘯 +// String PDF_FILE = "d:\\Users\\w\\Desktop\\test.pdf"; +// BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(PDF_FILE)); +// outputStream.write(mergePDFs); +// outputStream.flush(); +// outputStream.close(); +// } catch (DocumentException | IOException e) { +// e.printStackTrace(); +// return AjaxResult.error("鎵归噺鐢熸垚澶辫触"); +// } +// return AjaxResult.success(); +// } } -- Gitblit v1.8.0