zjh
2025-04-18 1630243ed75a92c60d0638e7d14477e4aadcf2b7
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java
@@ -39,6 +39,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
@@ -106,24 +107,29 @@
    private IDictHospService dictHospService;
    @Autowired
    private ITjReportPrintService printService;
    @Autowired
    private TjOrderYcxmService ycxmService;
    @GetMapping("/savePdf")
    @ApiOperation(value = "从本地存储模板到数据库")
    public AjaxResult savePdf() {
        //从文件地址读入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("保存成功");
        if(StringUtil.isNotBlank(base64String)){
            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("保存成功");
            }
        }
        return AjaxResult.success("保存失败");
//        String base64String2 = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\心电图1.pdf");
//        TjReport tem2 = new TjReport();
@@ -305,26 +311,32 @@
//            return error;
//        }
//        return AjaxResult.success("该用户体检未完成,不能打印报告!!!");
        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) return AjaxResult.error("存在未检或延期项目暂不能生成报告!!!");
            if (num > 0) {
                tjOrder.setReportTime(null);
                tjOrder.setCheckTime(null);
                tjOrder.setCheckStatus(0);
                tjOrder.setPrintLastTime(null);
                tjOrderService.updateById(tjOrder);
                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<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("该客户报告已生成!不能重复生成!可直接预览或打印!");
            }
@@ -371,26 +383,25 @@
                    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::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);
//                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);
@@ -403,9 +414,13 @@
                } catch (Exception e) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    log.error(String.valueOf(e));
                    // 调用撤销
//                    tjReportController.backOnlyCheckType(tjNumber);
                    logger.error("生成报告异常");
                    tjOrder.setReportTime(null);
                    tjOrder.setCheckTime(null);
                    tjOrder.setCheckStatus(0);
                    tjOrder.setPrintLastTime(null);
                    tjOrderService.updateById(tjOrder);
                    logger.error(String.valueOf(e));
                    return AjaxResult.error("生成报告失败");
                }
            } else {
@@ -435,8 +450,8 @@
            tjReport.setTjNumber(String.valueOf(tjNumber));
            tjReport.setPath(urlValue + outputFileName1);
            String outputPath1 = value + File.separator;
            String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
            tjReport.setReport(pdfBinary);
//            String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
//            tjReport.setReport(pdfBinary);
            tjReport.setType("体检报告");
            tjReport.setPrint("pdf");
            tjReportService.save(tjReport);
@@ -449,8 +464,8 @@
//            updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
            tjOrder.setStatus(TjConstants.TJ_END);
            tjOrder.setReportTime(date);
            tjOrder.setPrintLastTime(date);
            tjOrder.setDownloadLastTime(date);
//            tjOrder.setPrintLastTime(date);
//            tjOrder.setDownloadLastTime(date);
            tjOrderService.updateById(tjOrder);
        }
        return ajaxResult;
@@ -1700,7 +1715,7 @@
        we.eq(TjReport::getType, "体检报告");
        TjReport one = tjReportService.getOne(we);
        if (one == null) {
            return AjaxResult.error("暂无体检报告");
            return AjaxResult.error("暂无体检报告,请撤回到总检未审核页面,需总检医生重新审核并生成报告!");
        }
        if ("pdf".equals(one.getPrint())) {
            res.put("flag", "0");
@@ -1710,7 +1725,7 @@
            res.put("url", one.getPath());
            return AjaxResult.success(res);
        } else {
            return AjaxResult.error("暂无体检报告");
            return AjaxResult.error("暂无体检报告,请撤回到总检未审核页面,需总检医生重新审核并生成报告!");
        }
    }
@@ -1719,38 +1734,100 @@
    @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);
        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 + tjCustomer.getCusId() + tjNumber + tjCustomer.getCusName() + "_报告.pdf";
        File f = new File(filePath);
        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="
                        + tjCustomer.getCusId() + tjNumber + ".pdf");
            } else {
                // 纯下载方式
                response.setContentType("application/x-msdownload");
                response.setContentType("application/pdf;charset=utf-8");
                response.setHeader("Content-Disposition", "attachment;filename="
                        + tjCustomer.getCusId() + tjNumber + ".pdf");
            }
            out = response.getOutputStream();
            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();
//        LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
//        wq1.eq(TjOrder::getTjNumber, tjNumber);
//        TjOrder tjOrder = tjOrderService.getOne(wq1);
        TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNumber);
//        LambdaQueryWrapper<TjCustomer> wq2 = new LambdaQueryWrapper<>();
//        wq2.eq(TjCustomer::getCusId, tjOrder.getUserId());
        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 = one.getPath();
        String filePath = value + File.separator + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf";
//        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";
        String filePath = value + File.separator + tjCustomer.getCusId() + tjNumber + tjCustomer.getCusName() + "_报告.pdf";
        File f = new File(filePath);
        if (filePath.isEmpty()) {
            System.out.println("文件不存在!");
@@ -1772,19 +1849,19 @@
                String contentType = u.openConnection().getContentType();
                response.setContentType(contentType);
                response.setHeader("Content-Disposition", "inline;filename="
                        + userId + tjNumber + ".pdf");
                        + tjCustomer.getCusId() + tjNumber + ".pdf");
            } else {
                // 纯下载方式
                response.setContentType("application/x-msdownload");
                response.setContentType("application/pdf;charset=utf-8");
                response.setHeader("Content-Disposition", "attachment;filename="
                        + userId + tjNumber + ".pdf");
                        + tjCustomer.getCusId() + tjNumber + ".pdf");
            }
            out = response.getOutputStream();
            while ((len = br.read(bs)) > 0) {
                out.write(bs, 0, len);
            }
            if(null !=tjOrder.getHeshouTime() && tjOrder.getHeshouStatus()==1){
            if(null !=sfdy && sfdy.equals("1")){
                TjReportPrint print=new TjReportPrint();
                print.setTjNumber(tjNumber);
                print.setPrintBy(SecurityUtils.getLoginUser().getUser().getNickName());
@@ -1792,6 +1869,7 @@
                print.setPrintStatus("已打印");
                if (printService.save(print)) {
                    tjOrder.setPrintLastTime(date);
                    tjOrder.setStatus(TjConstants.TJ_END);
                    tjOrderService.updateById(tjOrder);
                }
            }
@@ -1827,6 +1905,29 @@
        } else {
            return makeReport(tjNumbers);
        }
    }
    @GetMapping("/xiugaidayinzhuangtai")
    @ApiOperation(value = "修改打印状态接口")
    @Transactional
    public AjaxResult xiugaidayinzhuangtai(@RequestParam String tjNumber) {
        TjOrder order = tjOrderService.getOrderByTjNum(tjNumber);
        if(null !=order){
            Date date=new Date();
            TjReportPrint print=new TjReportPrint();
            print.setTjNumber(tjNumber);
            print.setPrintBy(SecurityUtils.getLoginUser().getUser().getNickName());
            print.setPrintTime(date);
            print.setPrintStatus("已打印");
            if (printService.save(print)) {
                order.setPrintLastTime(date);
                order.setStatus(TjConstants.TJ_END);
                tjOrderService.updateById(order);
            }
            return AjaxResult.success();
        }
     return AjaxResult.error();
    }
    /**
@@ -2058,45 +2159,47 @@
    @GetMapping("/revocationReport/{TjNumber}")
    @ApiOperation(value = "撤销生成体检报告")
    @Transactional
    public AjaxResult revocationReport(@PathVariable("TjNumber") String tjNumber) {
        //逻辑删除数据库里的报告
        QueryWrapper<TjReport> wq1 = new QueryWrapper<>();
        wq1.select("re_id");
        wq1.eq("tj_number", tjNumber);
        wq1.eq("type", "体检报告");
        TjReport tjReport = tjReportService.getOne(wq1);
        if (null != tjReport) {
//            if (!tjReportService.remove(wq1)) {
//                return AjaxResult.error("撤回失败!");
//            }
            // 不在使用逻辑删除 逻辑删除导致打印报告生成 查询sql缓慢
            int i = tjReportService.deleteTjReportByReId(tjReport.getReId());
            if (i == 0) {
                return AjaxResult.error("撤回失败!");
        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)) {
                //逻辑删除数据库里的报告
                QueryWrapper<TjReport> wq1 = new QueryWrapper<>();
                wq1.select("re_id");
                wq1.eq("tj_number", tjNumber);
                wq1.eq("type", "体检报告");
                TjReport tjReport = tjReportService.getOne(wq1);
                if (null != tjReport) {
                    // 不在使用逻辑删除 逻辑删除导致打印报告生成 查询sql缓慢
                    int i = tjReportService.deleteTjReportByReId(tjReport.getReId());
                    if (i == 0) {
                        return AjaxResult.error("暂无体检报告,请撤回到总检未审核页面,需总检医生重新审核并生成报告!");
                    }
                }
                return AjaxResult.success("撤回成功!");
            }
        }
        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);
        }
        one.setReportTime(null);
        one.setCheckTime(null);
        //将状态改为未审核
//        UpdateWrapper updateWrapper=new UpdateWrapper();
//        updateWrapper.eq("tj_number",tjNumber);
//        updateWrapper.set("check_status",0);
        boolean update = tjOrderService.updateById(one);
        if (update) {
            return AjaxResult.success("撤回成功!");
        }
        return AjaxResult.error("撤回失败!");
        return AjaxResult.error("该人员体检记录不存在,请核实人员信息!");
    }
@@ -2146,8 +2249,8 @@
        LambdaQueryWrapper<TjOrder> wq2 = new LambdaQueryWrapper<>();
        wq2.eq(TjOrder::getFirmId, firmId);
        wq2.eq(TjOrder::getFirmDeptId, firmDeptId);
        wq2.eq(TjOrder::getTjType, "1");
        wq2.in(TjOrder::getStatus, 401, 402);
        wq2.ne(TjOrder::getTjType, "2");
//        wq2.in(TjOrder::getStatus, 401, 402);
        final List<TjOrder> list = tjOrderService.list(wq2);
        for (TjOrder tjOrder : list) {
@@ -2506,16 +2609,14 @@
    @GetMapping("/tuanDuiYiChangBySex")
    @ApiOperation(value = "生成团队体检报告——男女异常结果统计")
    public Map<String, List<Map<String, Object>>> tuanDuiYiChangBySex(@ApiParam(value = "单位") @RequestParam String firmId,
                                                                      @ApiParam(value = "部门") @RequestParam String firmDeptId) {
    public Map<String, List<Map<String, Object>>> tuanDuiYiChangBySex(@ApiParam(value = "单位") @RequestParam String dwname) {
        Map<String, List<Map<String, Object>>> all = new HashMap<>();
        LambdaQueryWrapper<TjOrder> wq2 = new LambdaQueryWrapper<>();
        wq2.eq(TjOrder::getFirmId, firmId);
        wq2.eq(TjOrder::getFirmDeptId, firmDeptId);
        wq2.eq(TjOrder::getTjType, "1");
        wq2.in(TjOrder::getStatus, 401, 402);
        wq2.eq(TjOrder::getFirmName,dwname);
        wq2.ne(TjOrder::getTjType, "2");
//        wq2.in(TjOrder::getStatus, 401, 402);
        final List<TjOrder> list = tjOrderService.list(wq2);
        List<String> tjNumberList = list.stream().map(TjOrder::getTjNumber).collect(Collectors.toList());