| | |
| | | |
| | | import java.io.*; |
| | | import java.net.URL; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Paths; |
| | | import java.text.NumberFormat; |
| | |
| | | import com.itextpdf.text.*; |
| | | import com.itextpdf.text.pdf.*; |
| | | import com.itextpdf.text.pdf.draw.LineSeparator; |
| | | import com.ltkj.common.annotation.Log; |
| | | import com.ltkj.common.core.domain.entity.SysDictData; |
| | | import com.ltkj.common.utils.DateUtils; |
| | | import com.ltkj.common.utils.PDFDocumentUtil; |
| | |
| | | import com.ltkj.framework.config.MatchUtils; |
| | | import com.ltkj.hosp.domain.*; |
| | | import com.ltkj.hosp.service.*; |
| | | import com.ltkj.hosp.vodomain.UpdateOrderRemarkVo; |
| | | import com.ltkj.mall.mallOrderUtils.TjConstants; |
| | | import com.ltkj.system.service.ISysConfigService; |
| | | import com.ltkj.system.service.ISysDictDataService; |
| | | import com.ltkj.system.service.ISysUserService; |
| | | import com.ltkj.web.config.pdfutils.MergePdf; |
| | | import com.ltkj.web.config.pdfutils.MyHeaderFooter; |
| | | import com.ltkj.web.config.pdfutils.PDFBinaryUtil; |
| | | import com.ltkj.web.config.pdfutils.PdfUtils; |
| | | import com.ltkj.web.controller.his.HisPDFUtil; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | 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.*; |
| | |
| | | * @author ltkj |
| | | * @date 2022-12-06 |
| | | */ |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/system/report") |
| | | @Api(tags = "体检报告") |
| | | @Api(tags = "AAAA_体检报告") |
| | | @Transactional |
| | | public class TjReportController extends BaseController { |
| | | @Resource |
| | |
| | | private ISysDictDataService dictDataService; |
| | | @Resource |
| | | private ITbTransitionService transitionService; |
| | | |
| | | @Autowired |
| | | private ITjBigPositiveService tjBigPositiveService; |
| | | @Autowired |
| | | private HisPDFUtil hisPDFUtil; |
| | | @Autowired |
| | | private IDictHospService dictHospService; |
| | | @Autowired |
| | | private ITjReportPrintService printService; |
| | | |
| | | @GetMapping("/savePdf") |
| | | @ApiOperation(value = "从本地存储模板到数据库") |
| | | public AjaxResult savePdf() { |
| | | //从文件地址读入PDF文件 仅存储一次 |
| | | String base64String = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\体检模板5.pdf"); |
| | | String base64String = PDFBinaryUtil.getPDFBinary(configService.selectConfigByKey("default_pdf5Template")); |
| | | reportTemplateService.remove(new LambdaQueryWrapper<TjReportTemplate>().eq(TjReportTemplate::getName,"体检报告模板5")); |
| | | TjReportTemplate tem = new TjReportTemplate(); |
| | | tem.setName("体检报告模板5"); |
| | | tem.setRemark("体检报告模板5"); |
| | | tem.setTemplate(base64String); |
| | | tem.setFlag("1"); |
| | | tem.setOpen("0"); |
| | | tem.setCreateTime(DateUtil.date()); |
| | | final boolean save = reportTemplateService.save(tem); |
| | | if (save) { |
| | | return AjaxResult.success("保存成功"); |
| | |
| | | @ApiOperation(value = "打印体检报告为pdf") |
| | | @Transactional |
| | | public AjaxResult toPdf(@PathVariable("TjNumber") @ApiParam(value = "体检号") String tjNumber) { |
| | | AjaxResult error = null; |
| | | // AjaxResult error = null; |
| | | // 之前的代码 优化速度 |
| | | // System.out.println("----------------------------------oldFun开始-------------------------------------------------------"); |
| | | // error = oldFun(tjNumber); |
| | |
| | | // return error; |
| | | // } |
| | | // return AjaxResult.success("该用户体检未完成,不能打印报告!!!"); |
| | | int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber); |
| | | if (num > 0) { |
| | | return AjaxResult.error("有延期项目暂不能生成报告!!!"); |
| | | |
| | | TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNumber); |
| | | if (null != tjOrder) { |
| | | String config = configService.selectConfigByKey("sfjcwjhyqxm"); |
| | | if(null != config && config.equalsIgnoreCase("Y")){ |
| | | int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber); |
| | | if (num > 0) { |
| | | tjOrder.setReportTime(null); |
| | | tjOrder.setCheckTime(null); |
| | | tjOrder.setCheckStatus(0); |
| | | tjOrder.setPrintLastTime(null); |
| | | tjOrderService.updateById(tjOrder); |
| | | 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"); |
| | | if (configByKey.equals("Y")) { |
| | | LambdaQueryWrapper<TjOrder> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(TjOrder::getTjNumber, tjNumber); |
| | | TjOrder tjOrder = tjOrderService.getOne(queryWrapper); |
| | | 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 (tjOrder.getReportTime() !=null || count != 0 ) { |
| | | tjOrder.setReportTime(null); |
| | | tjOrder.setCheckTime(null); |
| | | tjOrder.setCheckStatus(0); |
| | | tjOrder.setPrintLastTime(null); |
| | | tjOrderService.updateById(tjOrder); |
| | | return AjaxResult.error("该客户报告已生成!不能重复生成!可直接预览或打印!"); |
| | | } |
| | | |
| | | 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("已生成报告!可直接点击预览!"); |
| | | } |
| | | Integer checkStatus = tjOrder.getCheckStatus(); |
| | | if (checkStatus == 1) { |
| | | 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(finishTime); |
| | | 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); |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | return hisPDFUtil.execHisRequest(map, params, tjOrder, reportTemplate); |
| | | } else { |
| | | return AjaxResult.error("请先总检"); |
| | | String hisRegistrationId = tjOrder.getCardId(); |
| | | Date createTime = tjOrder.getCreateTime(); |
| | | 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); |
| | | LambdaQueryWrapper<TjReportTemplate> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(TjReportTemplate::getFlag,"4"); |
| | | wrapper.eq(TjReportTemplate::getOpen,"1"); |
| | | TjReportTemplate zongJianYiShiQianMing = reportTemplateService.getOne(wrapper); |
| | | try { |
| | | return shengchengbgmoban(tjNumber, tjOrder, tjCustomer, reportTemplate,zongJianYiShiQianMing); |
| | | } catch (Exception e) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | log.error(String.valueOf(e)); |
| | | tjOrder.setReportTime(null); |
| | | tjOrder.setCheckTime(null); |
| | | tjOrder.setCheckStatus(0); |
| | | tjOrder.setPrintLastTime(null); |
| | | tjOrderService.updateById(tjOrder); |
| | | |
| | | logger.error("生成报告异常"); |
| | | return AjaxResult.error("生成报告失败"); |
| | | } |
| | | } else { |
| | | return AjaxResult.error("请先总检"); |
| | | } |
| | | } |
| | | return AjaxResult.error(); |
| | | } |
| | | |
| | | public AjaxResult shengchengbgmoban(String tjNumber, TjOrder tjOrder, TjCustomer tjCustomer, TjReportTemplate reportTemplate,TjReportTemplate zongJianYiShiQianMing) { |
| | | AjaxResult ajaxResult = null; |
| | | try { |
| | | // ajaxResult = hisPDFUtil.hisPDF(tjOrder, tjCustomer, reportTemplate); |
| | | // ajaxResult = hisPDFUtil.hisPDFNew(tjOrder, tjCustomer, reportTemplate); |
| | | |
| | | ajaxResult = hisPDFUtil.hisPDFNew2(tjOrder, tjCustomer, reportTemplate,zongJianYiShiQianMing); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error(String.valueOf(e)); |
| | | } |
| | | 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 + File.separator; |
| | | String pdfBinary = getPDFBinary(outputPath1 + outputFileName1); |
| | | tjReport.setReport(pdfBinary); |
| | | tjReport.setType("体检报告"); |
| | | tjReport.setPrint("pdf"); |
| | | tjReportService.save(tjReport); |
| | | Date date = new Date(); |
| | | // LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | // updateWrapper.eq(TjOrder::getTjNumber, tjNumber); |
| | | // updateWrapper.set(TjOrder::getReportTime, date); |
| | | // updateWrapper.set(TjOrder::getPrintLastTime, date); |
| | | // updateWrapper.set(TjOrder::getDownloadLastTime,date); |
| | | // updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END); |
| | | tjOrder.setStatus(TjConstants.TJ_END); |
| | | tjOrder.setReportTime(date); |
| | | // tjOrder.setPrintLastTime(date); |
| | | // tjOrder.setDownloadLastTime(date); |
| | | tjOrderService.updateById(tjOrder); |
| | | } |
| | | return ajaxResult; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 撤销 |
| | | * @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) { |
| | |
| | | for (String key : data.keySet()) { |
| | | form.setField(key, data.get(key).toString()); |
| | | } |
| | | System.out.println("pdf填充表单数据耗时:"+(System.currentTimeMillis() - pdfMkStart)); |
| | | System.out.println("pdf填充表单数据耗时:" + (System.currentTimeMillis() - pdfMkStart)); |
| | | //设置为无法编辑 |
| | | ps.setFormFlattening(true); |
| | | ps.close(); |
| | |
| | | } |
| | | } |
| | | long fujianEnd = System.currentTimeMillis(); |
| | | System.out.println("附件查询耗时:"+(fujianEnd - fujianStart)); |
| | | System.out.println("文件保存前耗时:"+(fujianEnd - pdfMkStart)); |
| | | System.out.println("附件查询耗时:" + (fujianEnd - fujianStart)); |
| | | System.out.println("文件保存前耗时:" + (fujianEnd - pdfMkStart)); |
| | | // 保存pdf文件 |
| | | copy.close(); |
| | | String outputPath1 = value + "\\"; |
| | | String outputPath1 = value + File.separator; |
| | | String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "new_体检报告.pdf"; |
| | | File file = new File(outputPath1 + outputFileName1); |
| | | BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file)); |
| | |
| | | // 设置正文字体样式:12号 |
| | | Font textFont = PdfUtils.setFont(9); |
| | | //创建表格 将表头字体和正文字体放进去 |
| | | PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value); |
| | | DictHosp dictHosp = dictHospService.list().get(0); |
| | | PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value,dictHosp.equals("澄合矿务局中心医院")); |
| | | document.add(paragraph); |
| | | document.add(table); |
| | | //判断备注是否为空 空不能显示null |
| | |
| | | } |
| | | |
| | | private AjaxResult oldFun(String tjNumber) { |
| | | DictHosp dictHosp = dictHospService.list().get(0); |
| | | long startTime = System.currentTimeMillis(); |
| | | int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber); |
| | | if (num > 0) return AjaxResult.error("有延期项目暂不能生成报告!!!"); |
| | |
| | | String template = reportTemplate.getTemplate(); |
| | | String userId = SecurityUtils.getLoginUser().getUsername(); |
| | | if (template != null) { |
| | | PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + "\\" + userId + "体检报告封面模板.pdf"); |
| | | PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + File.separator + userId + "体检报告封面模板.pdf"); |
| | | } |
| | | // --------以上------- 根据数据库中的模板二进制文件 转pdf 创建文件夹 将pdf放进本地文件夹 |
| | | |
| | |
| | | tjOrderDetail.setProject(tjProject); |
| | | } |
| | | |
| | | String inputFileName = value + "\\" + userId + "体检报告封面模板.pdf"; |
| | | String outputFileName = value + "\\" + userId + "体检报告封面页.pdf"; |
| | | String inputFileName = value + File.separator + userId + "体检报告封面模板.pdf"; |
| | | String outputFileName = value + File.separator + userId + "体检报告封面页.pdf"; |
| | | OutputStream os = null; |
| | | PdfStamper ps = null; |
| | | PdfReader reader = null; |
| | |
| | | //设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距 |
| | | document.setMargins(70, 70, 40, 40); |
| | | //生成pdf的位置以及名称 |
| | | String fileName = value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf"; |
| | | String fileName = value + File.separator + userId + tjNumber + "体检报告项目详情页.pdf"; |
| | | OutputStream outputStream = Files.newOutputStream(Paths.get(fileName)); |
| | | PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream); |
| | | |
| | |
| | | // 设置正文字体样式:12号 |
| | | Font textFont = PdfUtils.setFont(9); |
| | | //创建表格 将表头字体和正文字体放进去 |
| | | PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value); |
| | | PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value,dictHosp.equals("澄合矿务局中心医院")); |
| | | document.add(paragraph); |
| | | document.add(table); |
| | | |
| | |
| | | // TjReport one11111 = tjReportService.getOne(rtwq1); |
| | | // if(null !=one11111){ |
| | | // String report1 = one11111.getReport(); |
| | | // PDFBinaryUtil.base64StringToPDF(report1, FileUtil.mkdir(value).getPath() + "\\" + userId + "医学名词.pdf"); |
| | | // PDFBinaryUtil.base64StringToPDF(report1, FileUtil.mkdir(value).getPath() + File.separator + userId + "医学名词.pdf"); |
| | | // } |
| | | |
| | | LambdaQueryWrapper<TjReport> rtwq = new LambdaQueryWrapper<>(); |
| | |
| | | TjReport one1111 = tjReportService.getOne(rtwq); |
| | | if (null != one1111) { |
| | | String report = one1111.getReport(); |
| | | PDFBinaryUtil.base64StringToPDF(report, FileUtil.mkdir(value).getPath() + "\\" + tjNumber + userId + "心电图.pdf"); |
| | | PDFBinaryUtil.base64StringToPDF(report, FileUtil.mkdir(value).getPath() + File.separator + tjNumber + userId + "心电图.pdf"); |
| | | } |
| | | |
| | | LambdaQueryWrapper<TjReport> rtwq12 = new LambdaQueryWrapper<>(); |
| | |
| | | TjReport one111112 = tjReportService.getOne(rtwq12); |
| | | if (null != one111112) { |
| | | String report12 = one111112.getReport(); |
| | | PDFBinaryUtil.base64StringToPDF(report12, FileUtil.mkdir(value).getPath() + "\\" + tjNumber + userId + "附件.pdf"); |
| | | PDFBinaryUtil.base64StringToPDF(report12, FileUtil.mkdir(value).getPath() + File.separator + 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"}; |
| | | files1 = new String[]{value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + tjNumber + "体检报告项目详情页.pdf", value + File.separator + tjNumber + userId + "附件.pdf", value + File.separator + tjNumber + userId + "心电图.pdf"}; |
| | | } else { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "心电图.pdf"}; |
| | | files1 = new String[]{value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + tjNumber + "体检报告项目详情页.pdf", value + File.separator + tjNumber + userId + "心电图.pdf"}; |
| | | } |
| | | } else { |
| | | if (one111112 != null) { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "附件.pdf"}; |
| | | files1 = new String[]{value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + tjNumber + "体检报告项目详情页.pdf", value + File.separator + tjNumber + userId + "附件.pdf"}; |
| | | } else { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf"}; |
| | | files1 = new String[]{value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + tjNumber + "体检报告项目详情页.pdf"}; |
| | | } |
| | | } |
| | | //合并 |
| | | // String[] files1 = {value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber+"体检报告项目详情页.pdf", value + "\\" +tjNumber+ userId + "附件.pdf", value + "\\" + tjNumber + userId + "心电图.pdf"}; |
| | | String outputPath1 = value + "\\"; |
| | | // String[] files1 = {value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + tjNumber+"体检报告项目详情页.pdf", value + File.separator +tjNumber+ userId + "附件.pdf", value + File.separator + tjNumber + userId + "心电图.pdf"}; |
| | | String outputPath1 = value + File.separator; |
| | | String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"; |
| | | |
| | | File file1 = new File(outputPath1 + outputFileName1); |
| | |
| | | tjReport.setPrint("pdf"); |
| | | tjReportService.save(tjReport); |
| | | |
| | | //FileUtil.del(value + "\\" + tjNumber + "体检报告.pdf"); |
| | | //FileUtil.del(value + "\\" + userId + "体检报告封面模板.pdf"); |
| | | //FileUtil.del(value + "\\" + userId +tjNumber+ "体检报告项目详情页.pdf"); |
| | | //FileUtil.del(value + "\\" + userId + "体检报告封面页.pdf"); |
| | | //FileUtil.del(value + "\\" + userId + "心电图.pdf"); |
| | | //FileUtil.del(value + File.separator + tjNumber + "体检报告.pdf"); |
| | | //FileUtil.del(value + File.separator + userId + "体检报告封面模板.pdf"); |
| | | //FileUtil.del(value + File.separator + userId +tjNumber+ "体检报告项目详情页.pdf"); |
| | | //FileUtil.del(value + File.separator + userId + "体检报告封面页.pdf"); |
| | | //FileUtil.del(value + File.separator + userId + "心电图.pdf"); |
| | | |
| | | |
| | | //修改order表中的打印报告时间为当前时间 |
| | |
| | | e.printStackTrace(); |
| | | return AjaxResult.success("PDF导出失败"); |
| | | } finally { |
| | | transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjOrder.getCardId()); |
| | | // transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjOrder.getCardId()); |
| | | } |
| | | } |
| | | } |
| | |
| | | //创建map 键为父项目 值为子项目集合 |
| | | Map<TjOrderRemark, List<TjPdfVO>> printReport = new LinkedHashMap<>(); |
| | | //查到该客户的体检记录 |
| | | // LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>(); |
| | | // wq1.eq(TjOrder::getTjNumber, tjNumber); |
| | | // TjOrder one = tjOrderService.getOne(wq1); |
| | | |
| | | //拿到体检记录的orderid,查出项目详细信息 |
| | | // 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); |
| | | } |
| | |
| | | for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) { |
| | | List<TjPdfVO> tjPdfVOS = new ArrayList<>(); |
| | | for (TjOrderDetail tjOrderDetail : tjOrderDetails) { |
| | | if (entry.getKey().getProId().equals(tjOrderDetail.getProId())) { |
| | | if (entry.getKey().getProsId().equals(tjOrderDetail.getProsId())) { |
| | | TjPdfVO tjPdfVO = new TjPdfVO(); |
| | | tjPdfVO.setProName(tjOrderDetail.getProName()); |
| | | if (null != tjOrderDetail.getYcbz() && !tjOrderDetail.getYcbz().equals("")) { |
| | |
| | | } |
| | | } |
| | | printReport.put(entry.getKey(), tjPdfVOS); |
| | | if (tjPdfVOS.size() == 0) { |
| | | if (tjPdfVOS.isEmpty()) { |
| | | toRemoveKeys.add(entry.getKey()); |
| | | } |
| | | } |
| | |
| | | }); |
| | | List<Long> proIds = tjOrderDetails.stream().map(TjOrderDetail::getProId).collect(Collectors.toList()); |
| | | LambdaQueryWrapper<TjProject> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.in(TjProject::getProId,proIds); |
| | | queryWrapper.in(TjProject::getProId, proIds); |
| | | List<TjProject> projectList = projectService.list(queryWrapper); |
| | | for (TjOrderDetail tjOrderDetail : tjOrderDetails) { |
| | | TjProject tjProject = projectList.stream().filter(item -> item.getProId().equals(tjOrderDetail.getProId())).collect(Collectors.toList()).get(0); |
| | |
| | | System.out.println("'''''''''''''''''''''''''''''''''''" + tjOrderDetail.getOrderDetailId()); |
| | | } |
| | | // 判断在collect中是否存在 |
| | | if (collect.contains(tjOrderDetail.getProject().getProParentId())){ |
| | | if (collect.contains(tjOrderDetail.getProject().getProParentId())) { |
| | | LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>(); |
| | | wq6.eq(TjStandard::getProId, tjOrderDetail.getProId()); |
| | | List<TjStandard> list2 = tjStandardService.list(wq6); |
| | | if (list2.size() == 0) { |
| | | if (list2.isEmpty()) { |
| | | TjStandard s = new TjStandard(); |
| | | s.setCompany(" "); |
| | | s.setTjStandardLtValue(" "); |
| | |
| | | tjPdfVOS.add(tjPdfVO); |
| | | } |
| | | } |
| | | printReport.entrySet().stream().forEach(item->{ |
| | | printReport.entrySet().stream().forEach(item -> { |
| | | List<TjPdfVO> pdfVOS = hashMap.get(item.getKey().getProId()); |
| | | printReport.put(item.getKey(),pdfVOS); |
| | | printReport.put(item.getKey(), pdfVOS); |
| | | }); |
| | | } |
| | | |
| | |
| | | @GetMapping("/preview/{flag}/{TjNumber}") |
| | | @ApiOperation(value = "下载体检报告") |
| | | public void preview(HttpServletResponse response, @PathVariable("flag") boolean flag, @PathVariable("TjNumber") String tjNumber) { |
| | | //修改order表中的下载报告时间为当前时间 |
| | | 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); |
| | | |
| | | |
| | | LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>(); |
| | | wq1.eq(TjOrder::getTjNumber, tjNumber); |
| | | TjOrder tjOrder = tjOrderService.getOne(wq1); |
| | | |
| | | |
| | | LambdaQueryWrapper<TjCustomer> wq2 = new LambdaQueryWrapper<>(); |
| | | wq2.eq(TjCustomer::getCusId, tjOrder.getUserId()); |
| | | TjCustomer tjCustomer = tjCustomerService.getOne(wq2); |
| | | |
| | | |
| | | TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNumber); |
| | | TjCustomer tjCustomer = tjCustomerService.getById( tjOrder.getUserId()); |
| | | LambdaQueryWrapper<TjReport> we = new LambdaQueryWrapper<>(); |
| | | we.eq(TjReport::getTjNumber, tjNumber); |
| | | we.eq(TjReport::getType, "体检报告"); |
| | |
| | | if (one == null) { |
| | | return; |
| | | } |
| | | |
| | | String userId = SecurityUtils.getLoginUser().getUsername(); |
| | | PDFBinaryUtil.base64StringToPDF(one.getReport(), FileUtil.mkdir(value).getPath() + "\\" + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"); |
| | | //String filePath = one.getPath(); |
| | | String filePath = value + "\\" + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"; |
| | | PDFBinaryUtil.base64StringToPDF(one.getReport(), FileUtil.mkdir(value).getPath() + File.separator + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"); |
| | | String filePath = value + File.separator + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"; |
| | | File f = new File(filePath); |
| | | if (filePath.isEmpty()) { |
| | | System.out.println("文件不存在!"); |
| | |
| | | while ((len = br.read(bs)) > 0) { |
| | | out.write(bs, 0, len); |
| | | } |
| | | // if(null !=tjOrder.getHeshouTime() && tjOrder.getHeshouStatus()==1){ |
| | | // TjReportPrint print=new TjReportPrint(); |
| | | // print.setTjNumber(tjNumber); |
| | | // print.setPrintBy(SecurityUtils.getLoginUser().getUser().getNickName()); |
| | | // print.setPrintTime(date); |
| | | // print.setPrintStatus("已打印"); |
| | | // if (printService.save(print)) { |
| | | // tjOrder.setPrintLastTime(date); |
| | | // tjOrderService.updateById(tjOrder); |
| | | // } |
| | | // } |
| | | out.flush(); |
| | | out.close(); |
| | | br.close(); |
| | | fileInputStream.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | //System.out.println("pdf处理文件异常" + e); |
| | | } finally { |
| | | if (out != null) { |
| | | try { |
| | | out.close(); |
| | | br.close(); |
| | | fileInputStream.close(); |
| | | |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @GetMapping("/previewprint/{flag}/{TjNumber}/{sfdy}") |
| | | @ApiOperation(value = "下载体检报告") |
| | | public void previewprint(HttpServletResponse response, @PathVariable("flag") boolean flag, @PathVariable("TjNumber") String tjNumber,@PathVariable("sfdy") String sfdy) { |
| | | |
| | | Date date = new Date(); |
| | | TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNumber); |
| | | |
| | | TjCustomer tjCustomer = tjCustomerService.getById( tjOrder.getUserId()); |
| | | |
| | | LambdaQueryWrapper<TjReport> we = new LambdaQueryWrapper<>(); |
| | | we.eq(TjReport::getTjNumber, tjNumber); |
| | | we.eq(TjReport::getType, "体检报告"); |
| | | TjReport one = tjReportService.getOne(we); |
| | | if (one == null) { |
| | | return; |
| | | } |
| | | |
| | | String userId = SecurityUtils.getLoginUser().getUsername(); |
| | | PDFBinaryUtil.base64StringToPDF(one.getReport(), FileUtil.mkdir(value).getPath() + File.separator + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"); |
| | | String filePath = value + File.separator + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf"; |
| | | File f = new File(filePath); |
| | | if (filePath.isEmpty()) { |
| | | System.out.println("文件不存在!"); |
| | | return; |
| | | } |
| | | BufferedInputStream br = null; |
| | | OutputStream out = null; |
| | | FileInputStream fileInputStream = null; |
| | | try { |
| | | fileInputStream = new FileInputStream(f); |
| | | br = new BufferedInputStream(fileInputStream); |
| | | byte[] bs = new byte[1024]; |
| | | int len = 0; |
| | | response.reset(); // 非常重要 |
| | | if (flag) { |
| | | // 在线打开方式 |
| | | URL u = new URL("file:///" + filePath); |
| | | //System.out.println(u); |
| | | String contentType = u.openConnection().getContentType(); |
| | | response.setContentType(contentType); |
| | | response.setHeader("Content-Disposition", "inline;filename=" |
| | | + userId + tjNumber + ".pdf"); |
| | | } else { |
| | | // 纯下载方式 |
| | | response.setContentType("application/x-msdownload"); |
| | | response.setContentType("application/pdf;charset=utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename=" |
| | | + userId + tjNumber + ".pdf"); |
| | | } |
| | | out = response.getOutputStream(); |
| | | while ((len = br.read(bs)) > 0) { |
| | | out.write(bs, 0, len); |
| | | } |
| | | if(null !=sfdy && sfdy.equals("1")){ |
| | | TjReportPrint print=new TjReportPrint(); |
| | | print.setTjNumber(tjNumber); |
| | | print.setPrintBy(SecurityUtils.getLoginUser().getUser().getNickName()); |
| | | print.setPrintTime(date); |
| | | print.setPrintStatus("已打印"); |
| | | if (printService.save(print)) { |
| | | tjOrder.setPrintLastTime(date); |
| | | tjOrder.setStatus(TjConstants.TJ_END); |
| | | tjOrderService.updateById(tjOrder); |
| | | } |
| | | } |
| | | out.flush(); |
| | | out.close(); |
| | | br.close(); |
| | |
| | | @PostMapping("/preview/batch") |
| | | @ApiOperation(value = "批量体检报告") |
| | | @Transactional |
| | | public AjaxResult preview(@RequestBody String data){ |
| | | 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 { |
| | | } else { |
| | | return makeReport(tjNumbers); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 通过sql 重整数据模板 全部重新生成 |
| | | * |
| | | * @param tjNumbers |
| | | * @return |
| | | */ |
| | | private AjaxResult makeReport(List<String > tjNumbers) { |
| | | private AjaxResult makeReport(List<String> tjNumbers) { |
| | | ArrayList<String> base64Pdfs = new ArrayList<>(); |
| | | for (String tjNumber : tjNumbers) { |
| | | LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); |
| | |
| | | // outputStream.flush(); |
| | | // outputStream.close(); |
| | | String s = Base64.getEncoder().encodeToString(mergePDFs); |
| | | return AjaxResult.success().put("file",s); |
| | | return AjaxResult.success().put("file", s); |
| | | } catch (DocumentException | IOException e) { |
| | | e.printStackTrace(); |
| | | return AjaxResult.error("批量生成失败"); |
| | |
| | | wq1.eq("type", "体检报告"); |
| | | 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("撤回失败!"); |
| | | } |
| | | } |
| | | 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); |
| | | } |
| | | //将状态改为未审核 |
| | | // UpdateWrapper updateWrapper=new UpdateWrapper(); |
| | | // updateWrapper.eq("tj_number",tjNumber); |
| | | // updateWrapper.set("check_status",0); |
| | | boolean update = tjOrderService.updateById(one); |
| | | |
| | | if (update) { |
| | | return AjaxResult.success("撤回成功!"); |
| | | TjOrder one = tjOrderService.getOrderByTjNum(tjNumber); |
| | | if(null !=one){ |
| | | if(null !=one.getHeshouTime() && one.getHeshouStatus()==1)return AjaxResult.error("报告已核收不可撤回!!!"); |
| | | one.setCheckStatus(0); |
| | | String config = configService.selectConfigByKey("tj_confirm"); |
| | | if ("Y".equals(config)) { |
| | | one.setStatus(TjConstants.TJ_CHECK); |
| | | } else { |
| | | one.setStatus(TjConstants.TJ_CONFIRM); |
| | | } |
| | | one.setReportTime(null); |
| | | one.setCheckTime(null); |
| | | one.setCheckDoctor(null); |
| | | one.setHeshouStatus(0); |
| | | one.setHeshouTime(null); |
| | | one.setHeshouDoctor(null); |
| | | one.setPrintLastTime(null); |
| | | one.setDownloadLastTime(null); |
| | | if (tjOrderService.updateById(one)) { |
| | | return AjaxResult.success("撤回成功!"); |
| | | } |
| | | } |
| | | return AjaxResult.error("撤回失败!"); |
| | | |