package com.ltkj.web.controller.system;
|
|
import java.io.*;
|
import java.net.URL;
|
import java.nio.file.Files;
|
import java.nio.file.Paths;
|
import java.text.NumberFormat;
|
import java.util.*;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.io.FileUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.itextpdf.text.*;
|
import com.itextpdf.text.pdf.*;
|
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.SecurityUtils;
|
import com.ltkj.common.utils.StringUtils;
|
import com.ltkj.framework.config.MatchUtils;
|
import com.ltkj.hosp.domain.*;
|
import com.ltkj.hosp.service.*;
|
import com.ltkj.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 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.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
import com.ltkj.common.core.controller.BaseController;
|
import com.ltkj.common.core.domain.AjaxResult;
|
|
import static com.ltkj.web.config.pdfutils.PDFBinaryUtil.getPDFBinary;
|
|
/**
|
* 体检报告存储Controller
|
*
|
* @author ltkj
|
* @date 2022-12-06
|
*/
|
@RestController
|
@RequestMapping("/system/report")
|
@Api(tags = "体检报告")
|
@Transactional
|
public class TjReportController extends BaseController {
|
@Resource
|
private ITjReportService tjReportService;
|
@Resource
|
private ITjCustomerService tjCustomerService;
|
@Autowired
|
private ITjOrderService tjOrderService;
|
@Autowired
|
private ITjOrderDetailService tjOrderDetailService;
|
@Resource
|
private ITjProjectService projectService;
|
@Resource
|
private ITjOrderRemarkService tjOrderRemarkService;
|
@Resource
|
private ITjStandardService tjStandardService;
|
@Resource
|
private IDictCompService dictCompService;
|
@Resource
|
private ITjReportTemplateService reportTemplateService;
|
@Value("${path.filePath}")
|
private String value;
|
@Value("${path.reportServer}")
|
private String urlValue;
|
@Resource
|
private ISysUserService userService;
|
@Resource
|
private ITjOrderDetailRulesService detailRulesService;
|
@Resource
|
private ITjRulesService rulesService;
|
@Autowired
|
private ISysConfigService configService;
|
|
@Autowired
|
private ISysDictDataService dictDataService;
|
@Resource
|
private ITbTransitionService transitionService;
|
|
@Autowired
|
private ITjBigPositiveService tjBigPositiveService;
|
|
@GetMapping("/savePdf")
|
@ApiOperation(value = "从本地存储模板到数据库")
|
public AjaxResult savePdf() {
|
//从文件地址读入PDF文件 仅存储一次
|
String base64String = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\体检模板5.pdf");
|
TjReportTemplate tem = new TjReportTemplate();
|
tem.setName("体检报告模板5");
|
tem.setRemark("体检报告模板5");
|
tem.setTemplate(base64String);
|
tem.setFlag("1");
|
tem.setOpen("0");
|
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();
|
// tem2.setTjNumber(tjNumber);
|
// tem2.setReport(base64String2);
|
// tem2.setType("心电图");
|
// tjReportService.save(tem2);
|
//
|
// String base64String1 = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\附件2.pdf");
|
// TjReport tem1 = new TjReport();
|
// tem1.setTjNumber(tjNumber);
|
// tem1.setReport(base64String1);
|
// tem1.setType("附件");
|
// tjReportService.save(tem1);
|
|
}
|
|
|
// /* *//**
|
// * 查询体检报告存储列表
|
// *//*
|
// @PreAuthorize("@ss.hasPermi('system:report:list')")
|
// @GetMapping("/list")
|
// public TableDataInfo list(TjReport tjReport) {
|
// startPage();
|
// List<TjReport> list = tjReportService.selectTjReportList(tjReport);
|
// return getDataTable(list);
|
// }
|
//
|
// *//**
|
// * 导出体检报告存储列表
|
// *//*
|
// @PreAuthorize("@ss.hasPermi('system:report:export')")
|
// @Log(title = "体检报告存储", businessType = BusinessType.EXPORT)
|
// @PostMapping("/export")
|
// public void export(HttpServletResponse response, TjReport tjReport) {
|
// List<TjReport> list = tjReportService.selectTjReportList(tjReport);
|
// ExcelUtil<TjReport> util = new ExcelUtil<TjReport>(TjReport.class);
|
// util.exportExcel(response, list, "体检报告存储数据");
|
// }
|
//
|
// *//**
|
// * 获取体检报告存储详细信息
|
// *//*
|
// @PreAuthorize("@ss.hasPermi('system:report:query')")
|
// @GetMapping(value = "/{reId}")
|
// public AjaxResult getInfo(@PathVariable("reId") Long reId) {
|
// return success(tjReportService.selectTjReportByReId(reId));
|
// }
|
//
|
// *//**
|
// * 存储体检报告
|
// *//*
|
// @PostMapping
|
// @ApiOperation(value = "生成体检报告给总检审核")
|
// public AjaxResult addReport(@RequestParam @ApiParam(value = "体检号") String tjNumber) {
|
// ReportVO report = new ReportVO();
|
// LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>();
|
// wq.eq(TjOrder::getTjNumber, tjNumber);
|
// TjOrder tjOrder = tjOrderService.getOne(wq);
|
// Integer checkStatus = tjOrder.getCheckStatus();
|
// if (checkStatus == 0) {
|
// report.setTjOrder(tjOrder);
|
// LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>();
|
// wq1.eq(TjCustomer::getCusId, tjOrder.getUserId());
|
// report.setTjCustomer(tjCustomerService.getOne(wq1));
|
// LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>();
|
// wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId());
|
// List<TjOrderDetail> list = tjOrderDetailService.list(wq2);
|
// for (TjOrderDetail tjOrderDetail : list) {
|
// TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId());
|
// tjOrderDetail.setProject(tjProject);
|
//
|
// }
|
// LambdaQueryWrapper<TjOrderRemark> wq5 = new LambdaQueryWrapper<>();
|
// wq5.eq(TjOrderRemark::getTjNumber, tjOrder.getTjNumber());
|
// List<TjOrderRemark> list1 = tjOrderRemarkService.list(wq5);
|
// for (TjOrderRemark tjOrderRemark : list1) {
|
// LambdaQueryWrapper<TjProject> wq3 = new LambdaQueryWrapper<>();
|
// wq3.eq(TjProject::getProParentId, tjOrderRemark.getProId());
|
// List<TjProject> list3 = projectService.list(wq3);
|
// List<Long> collect = list3.stream().map(TjProject::getProId).collect(Collectors.toList());
|
// LambdaQueryWrapper<TjOrderDetail> wq4 = new LambdaQueryWrapper<>();
|
// wq4.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId());
|
// wq4.in(TjOrderDetail::getProId, collect);
|
// List<TjOrderDetail> list6 = tjOrderDetailService.list(wq4);
|
// for (TjOrderDetail tjOrderDetail : list6) {
|
// TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId());
|
// tjOrderDetail.setProject(tjProject);
|
// LambdaQueryWrapper<TjAdvice> wq7 = new LambdaQueryWrapper<>();
|
// wq7.eq(TjAdvice::getProId, tjOrderDetail.getProId());
|
// List<TjAdvice> list4 = tjAdviceService.list(wq7);
|
// tjOrderDetail.setAdviceList(list4);
|
// LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>();
|
// wq6.eq(TjStandard::getProId, tjOrderDetail.getProId());
|
// List<TjStandard> list2 = tjStandardService.list(wq6);
|
// if (list2.size() == 0) {
|
// tjOrderDetail.setStandard(null);
|
// } else if (list2.size() == 1) {
|
// tjOrderDetail.setStandard(list2.get(0));
|
// } else {
|
// Long cusSex = tjCustomerService.getOne(wq1).getCusSex();
|
// Date cusBrithday = tjCustomerService.getOne(wq1).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 one = tjStandardService.getOne(wq8);
|
// tjOrderDetail.setStandard(one);
|
// }
|
// }
|
// }
|
// tjOrderRemark.setTjOrderDetailList(list6);
|
//
|
// }
|
// report.setTjOrderRemark(list1);
|
// } else {
|
// return AjaxResult.success("该报告已审核!");
|
// }
|
// return AjaxResult.success(report);
|
// }
|
//
|
//
|
// *//**
|
// * 修改体检报告存储
|
// *//*
|
// @PreAuthorize("@ss.hasPermi('system:report:edit')")
|
// @Log(title = "体检报告存储", businessType = BusinessType.UPDATE)
|
// @PutMapping
|
// public AjaxResult edit(@RequestBody TjReport tjReport) {
|
// return toAjax(tjReportService.updateTjReport(tjReport));
|
// }
|
//
|
// *//**
|
// * 删除体检报告存储
|
// *//*
|
// @PreAuthorize("@ss.hasPermi('system:report:remove')")
|
// @Log(title = "体检报告存储", businessType = BusinessType.DELETE)
|
// @DeleteMapping("/{reIds}")
|
// public AjaxResult remove(@PathVariable Long[] reIds) {
|
// return toAjax(tjReportService.deleteTjReportByReIds(reIds));
|
// }*/
|
|
@GetMapping("/toPdf/{TjNumber}")
|
@ApiOperation(value = "打印体检报告为pdf")
|
@Transactional
|
public AjaxResult toPdf(@PathVariable("TjNumber") @ApiParam(value = "体检号") String tjNumber) {
|
|
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, "体检报告");
|
List<TjReport> list2 = tjReportService.list(wqa);
|
if (list2.size() != 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){
|
PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + "\\" + userId + "体检报告封面模板.pdf");
|
}
|
// --------以上------- 根据数据库中的模板二进制文件 转pdf 创建文件夹 将pdf放进本地文件夹
|
|
|
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);
|
}
|
|
String inputFileName = value + "\\" + userId + "体检报告封面模板.pdf";
|
String outputFileName = value + "\\" + userId + "体检报告封面页.pdf";
|
OutputStream os = null;
|
PdfStamper ps = null;
|
PdfReader reader = null;
|
File file = new File(outputFileName);
|
try {
|
os = Files.newOutputStream(file.toPath());
|
// 读入pdf表单
|
reader = new PdfReader(inputFileName);
|
// 根据表单生成一个新的pdf
|
ps = new PdfStamper(reader, os);
|
// 获取pdf表单
|
AcroFields form = ps.getAcroFields();
|
//该字体造成类型不均匀,但是pdf转图片不乱码
|
//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<>();
|
|
//填充性别:判断男女
|
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());
|
}
|
//封面页下面的总检建议显示
|
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)+"、"+list1.get(i).getProName()+";\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)+"、"+projectService.getById(list.get(i).getProId()).getProName()+";\n");
|
}
|
}
|
}else {
|
str.append(" 无;\n");
|
}
|
|
//异常项目
|
data.put("yichang", str.toString());
|
|
// 遍历data 给pdf表单表格赋值
|
for (String key : data.keySet()) {
|
form.setField(key, data.get(key).toString());
|
}
|
//设置为无法编辑
|
ps.setFormFlattening(true);
|
ps.close();
|
os.close();
|
reader.close();
|
|
//====================================以上封面页,以下详情页
|
//文档对象 实现A4纸页面
|
Document document = new Document(PageSize.A4);
|
//document.setMarginMirroring(true);
|
//设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距
|
document.setMargins(70, 70, 40, 40);
|
//生成pdf的位置以及名称
|
String fileName = value + "\\" + userId +tjNumber+ "体检报告项目详情页.pdf";
|
OutputStream outputStream = Files.newOutputStream(Paths.get(fileName));
|
PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
|
|
//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);
|
// 设置正文字体样式:12号
|
Font textFont = PdfUtils.setFont(9);
|
//创建表格 将表头字体和正文字体放进去
|
PdfPTable table = PdfUtils.setTable1(headFont, textFont, titles, value);
|
document.add(paragraph);
|
document.add(table);
|
|
//判断备注是否为空 空不能显示null
|
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);
|
}
|
|
//判断主检医师是否为空 空不能显示null
|
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);
|
// 设置正文字体样式:12号
|
Font textFont = PdfUtils.setFont(9);
|
//创建表格 将表头字体和正文字体放进去
|
PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value);
|
document.add(paragraph);
|
document.add(table);
|
|
//判断备注是否为空 空不能显示null
|
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);
|
}
|
|
//判断主检医师是否为空 空不能显示null
|
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();
|
outputStream.close();
|
|
// LambdaQueryWrapper<TjReport> rtwq1 = new LambdaQueryWrapper<>();
|
// rtwq1.eq(TjReport::getType, "医学名词");
|
//// rtwq1.eq(TjReport::getTjNumber, tjNumber);
|
// TjReport one11111 = tjReportService.getOne(rtwq1);
|
// if(null !=one11111){
|
// String report1 = one11111.getReport();
|
// PDFBinaryUtil.base64StringToPDF(report1, FileUtil.mkdir(value).getPath() + "\\" + userId + "医学名词.pdf");
|
// }
|
|
LambdaQueryWrapper<TjReport> rtwq = new LambdaQueryWrapper<>();
|
rtwq.eq(TjReport::getType, "心电图");
|
rtwq.eq(TjReport::getTjNumber, tjNumber);
|
TjReport one1111 = tjReportService.getOne(rtwq);
|
if(null !=one1111){
|
String report = one1111.getReport();
|
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){
|
String report12 = one111112.getReport();
|
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"};
|
}
|
}else {
|
if (one111112!=null){
|
files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "附件.pdf"};
|
}else {
|
files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf"};
|
}
|
}
|
//合并
|
// String[] files1 = {value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber+"体检报告项目详情页.pdf", value + "\\" +tjNumber+ userId + "附件.pdf", value + "\\" + tjNumber + userId + "心电图.pdf"};
|
String outputPath1 = value + "\\";
|
String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf";
|
|
File file1 = new File(outputPath1 + outputFileName1);
|
List<File> f = new ArrayList<>();
|
for (String s : files1) {
|
f.add(new File(s));
|
}
|
MergePdf.mergeFileToPDF(f, file1);
|
|
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);
|
|
//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");
|
|
|
//修改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("已生成报告!可直接点击预览!");
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
return AjaxResult.success("PDF导出失败");
|
}finally {
|
transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(),tjOrder.getCardId());
|
}
|
}
|
}
|
return AjaxResult.success("该用户体检未完成,不能打印报告!!!");
|
}
|
//非化验项目报告
|
public Map<TjOrderRemark, List<TjPdfVO>> addTable(String tjNumber) {
|
//创建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.ne(TjOrderDetail::getProId,projectService.getHuaYanProId());
|
wq.eq(TjOrderDetail::getProId,projectService.getNotCcCtXdtProId());
|
// wq.notIn(TjOrderDetail::getProId,projectService.getNneedReprotProId());
|
List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.list(wq);
|
|
//遍历体检记录 将项目的具体信息
|
//遍历客户所选的项目(包含子项父项)
|
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.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);
|
}
|
|
extracted(printReport,one, customer);
|
return printReport;
|
}
|
|
|
//化验项目报告
|
public Map<TjOrderRemark, List<TjPdfVO>> addHuaYanTable(String tjNumber) {
|
//创建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);
|
|
for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
|
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(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);
|
}
|
}
|
printReport.put(entry.getKey(), tjPdfVOS);
|
if(tjPdfVOS.size()==0)
|
{toRemoveKeys.add(entry.getKey());}
|
}
|
toRemoveKeys.forEach(printReport::remove);
|
return printReport;
|
}
|
|
private void extracted(Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
|
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());
|
for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
|
TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
|
if (null != tjProject) {
|
tjOrderDetail.setProject(tjProject);
|
}
|
if (null == tjOrderDetail.getProject()) {
|
System.out.println("'''''''''''''''''''''''''''''''''''" + tjOrderDetail.getOrderDetailId());
|
}
|
if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId())) {
|
LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>();
|
wq6.eq(TjStandard::getProId, tjOrderDetail.getProId());
|
List<TjStandard> list2 = tjStandardService.list(wq6);
|
if (list2.size() == 0) {
|
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);
|
}
|
tjPdfVOS.add(tjPdfVO);
|
}
|
}
|
printReport.put(entry.getKey(), tjPdfVOS);
|
}
|
}
|
|
|
@GetMapping("/isPdfOrJimu")
|
@ApiOperation(value = "判断报告打开类型")
|
public AjaxResult isPdfOrJimu(String tjNumber) {
|
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){
|
return AjaxResult.error("暂无体检报告");
|
}
|
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());
|
return AjaxResult.success(res);
|
}else {
|
return AjaxResult.error("暂无体检报告");
|
}
|
|
}
|
|
|
|
@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);
|
|
|
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() + "\\" + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf");
|
//String filePath = one.getPath();
|
String filePath = value + "\\" + 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);
|
}
|
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("/revocationReport/{TjNumber}")
|
@ApiOperation(value = "撤销生成体检报告")
|
public AjaxResult revocationReport(@PathVariable("TjNumber") String tjNumber) {
|
//逻辑删除数据库里的报告
|
QueryWrapper<TjReport> wq1 = new QueryWrapper<>();
|
wq1.eq("tj_number", tjNumber);
|
wq1.eq("type", "体检报告");
|
if (null != tjReportService.getOne(wq1)) {
|
if (!tjReportService.remove(wq1)) {
|
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("撤回成功!");
|
}
|
return AjaxResult.error("撤回失败!");
|
|
}
|
|
|
@GetMapping("/tuanDuiReport")
|
@ApiOperation(value = "生成团队体检报告——年龄统计")
|
public Map<String, List<Map<String, Object>>> tuanDuiReport(@ApiParam(value = "单位") @RequestParam String firmId,
|
@ApiParam(value = "部门") @RequestParam String firmDeptId) {
|
Map<String, List<Map<String, Object>>> all = new HashMap<>();
|
List<Map<String, Object>> res1 = new ArrayList<>();
|
|
int a = 0;
|
Map<String, Object> resMap1 = new HashMap<>();
|
resMap1.put("name", "0-19岁");
|
resMap1.put("value", a);
|
res1.add(resMap1);
|
Map<String, Object> resMap2 = new HashMap<>();
|
resMap2.put("name", "20-29岁");
|
resMap2.put("value", a);
|
res1.add(resMap2);
|
Map<String, Object> resMap3 = new HashMap<>();
|
resMap3.put("name", "30-39岁");
|
resMap3.put("value", a);
|
res1.add(resMap3);
|
Map<String, Object> resMap4 = new HashMap<>();
|
resMap4.put("name", "40-49岁");
|
resMap4.put("value", a);
|
res1.add(resMap4);
|
Map<String, Object> resMap5 = new HashMap<>();
|
resMap5.put("name", "50-59岁");
|
resMap5.put("value", a);
|
res1.add(resMap5);
|
Map<String, Object> resMap6 = new HashMap<>();
|
resMap6.put("name", "60-69岁");
|
resMap6.put("value", a);
|
res1.add(resMap6);
|
Map<String, Object> resMap7 = new HashMap<>();
|
resMap7.put("name", "70-79岁");
|
resMap7.put("value", a);
|
res1.add(resMap7);
|
Map<String, Object> resMap8 = new HashMap<>();
|
resMap8.put("name", "80岁+");
|
resMap8.put("value", a);
|
res1.add(resMap8);
|
|
|
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);
|
final List<TjOrder> list = tjOrderService.list(wq2);
|
|
for (TjOrder tjOrder : list) {
|
a = 0;
|
final TjCustomer byId = tjCustomerService.getById(tjOrder.getUserId());
|
final int ageByIdCard = MatchUtils.getAgeByIdCard(byId.getCusIdcard());
|
|
|
if (0 <= ageByIdCard && ageByIdCard <= 19) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("0-19岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else if (20 <= ageByIdCard && ageByIdCard <= 29) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("20-29岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else if (30 <= ageByIdCard && ageByIdCard <= 39) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("30-39岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else if (40 <= ageByIdCard && ageByIdCard <= 49) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("40-49岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else if (50 <= ageByIdCard && ageByIdCard <= 59) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("50-59岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else if (60 <= ageByIdCard && ageByIdCard <= 69) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("60-69岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else if (70 <= ageByIdCard && ageByIdCard <= 79) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("70-79岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
} else {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("80岁+".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
}
|
}
|
}
|
}
|
all.put("data", res1);
|
return all;
|
|
}
|
|
@GetMapping("/tuanDuiReportBySex")
|
@ApiOperation(value = "生成团队体检报告——年龄性别统计")
|
public Map<String, List<Map<String, Object>>> tuanDuiReportBySex(@ApiParam(value = "单位") @RequestParam String firmIds,
|
@ApiParam(value = "部门") @RequestParam String firmDeptIds) {
|
Map<String, List<Map<String, Object>>> all = new HashMap<>();
|
List<Map<String, Object>> res1 = new ArrayList<>();
|
|
int a = 0;
|
int b = 0;
|
int c = 0;
|
Map<String, Object> resMap1 = new HashMap<>();
|
resMap1.put("name", "0-19岁");
|
resMap1.put("value", a);
|
resMap1.put("boy", b);
|
resMap1.put("girl", c);
|
resMap1.put("value1", 0);
|
resMap1.put("boy1", 0);
|
resMap1.put("girl1", 0);
|
res1.add(resMap1);
|
Map<String, Object> resMap2 = new HashMap<>();
|
resMap2.put("name", "20-29岁");
|
resMap2.put("value", a);
|
resMap2.put("boy", b);
|
resMap2.put("girl", c);
|
resMap2.put("value1", 0);
|
resMap2.put("boy1", 0);
|
resMap2.put("girl1", 0);
|
res1.add(resMap2);
|
Map<String, Object> resMap3 = new HashMap<>();
|
resMap3.put("name", "30-39岁");
|
resMap3.put("value", a);
|
resMap3.put("boy", b);
|
resMap3.put("girl", c);
|
resMap3.put("value1", 0);
|
resMap3.put("boy1", 0);
|
resMap3.put("girl1", 0);
|
res1.add(resMap3);
|
Map<String, Object> resMap4 = new HashMap<>();
|
resMap4.put("name", "40-49岁");
|
resMap4.put("value", a);
|
resMap4.put("boy", b);
|
resMap4.put("girl", c);
|
resMap4.put("value1", 0);
|
resMap4.put("boy1", 0);
|
resMap4.put("girl1", 0);
|
res1.add(resMap4);
|
Map<String, Object> resMap5 = new HashMap<>();
|
resMap5.put("name", "50-59岁");
|
resMap5.put("value", a);
|
resMap5.put("boy", b);
|
resMap5.put("girl", c);
|
resMap5.put("value1", 0);
|
resMap5.put("boy1", 0);
|
resMap5.put("girl1", 0);
|
res1.add(resMap5);
|
Map<String, Object> resMap6 = new HashMap<>();
|
resMap6.put("name", "60-69岁");
|
resMap6.put("value", a);
|
resMap6.put("boy", b);
|
resMap6.put("girl", c);
|
resMap6.put("value1", 0);
|
resMap6.put("boy1", 0);
|
resMap6.put("girl1", 0);
|
res1.add(resMap6);
|
Map<String, Object> resMap7 = new HashMap<>();
|
resMap7.put("name", "70-79岁");
|
resMap7.put("value", a);
|
resMap7.put("boy", b);
|
resMap7.put("girl", c);
|
resMap7.put("value1", 0);
|
resMap7.put("boy1", 0);
|
resMap7.put("girl1", 0);
|
res1.add(resMap7);
|
Map<String, Object> resMap8 = new HashMap<>();
|
resMap8.put("name", "80岁+");
|
resMap8.put("value", a);
|
resMap8.put("boy", b);
|
resMap8.put("girl", c);
|
resMap8.put("value1", 0);
|
resMap8.put("boy1", 0);
|
resMap8.put("girl1", 0);
|
res1.add(resMap8);
|
|
|
LambdaQueryWrapper<TjOrder> wq2 = new LambdaQueryWrapper<>();
|
wq2.eq(TjOrder::getFirmId, firmIds);
|
wq2.eq(TjOrder::getFirmDeptId, firmDeptIds);
|
wq2.eq(TjOrder::getTjType, "1");
|
wq2.in(TjOrder::getStatus, 401, 402);
|
final List<TjOrder> list = tjOrderService.list(wq2);
|
|
for (TjOrder tjOrder : list) {
|
a = 0;
|
b = 0;
|
c = 0;
|
final TjCustomer byId = tjCustomerService.getById(tjOrder.getUserId());
|
final int ageByIdCard = MatchUtils.getAgeByIdCard(byId.getCusIdcard());
|
|
if (0 <= ageByIdCard && ageByIdCard <= 19) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("0-19岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else if (20 <= ageByIdCard && ageByIdCard <= 29) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("20-29岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else if (30 <= ageByIdCard && ageByIdCard <= 39) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("30-39岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else if (40 <= ageByIdCard && ageByIdCard <= 49) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("40-49岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else if (50 <= ageByIdCard && ageByIdCard <= 59) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("50-59岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else if (60 <= ageByIdCard && ageByIdCard <= 69) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("60-69岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else if (70 <= ageByIdCard && ageByIdCard <= 79) {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("70-79岁".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
} else {
|
for (int i = 0; i < res1.size(); i++) {
|
if ("80岁+".equals(res1.get(i).get("name"))) {
|
a += 1;
|
res1.get(i).put("value", a);
|
if (byId.getCusSex() == 0) {
|
b += 1;
|
} else if (byId.getCusSex() == 1) {
|
c += 1;
|
}
|
res1.get(i).put("boy", b);
|
res1.get(i).put("girl", c);
|
}
|
}
|
}
|
}
|
//计算百分数
|
for (int i = 0; i < res1.size(); i++) {
|
final int value1 = (int) res1.get(i).get("boy");
|
final int value2 = (int) res1.get(i).get("girl");
|
final int value = (int) res1.get(i).get("value");
|
if (value != 0) {
|
double percentage = (value1 * 1.0 / value) * 100;
|
NumberFormat nf = NumberFormat.getPercentInstance();
|
nf.setMinimumFractionDigits(2);
|
String percent1 = nf.format(percentage / 100);
|
|
double percentage1 = (value2 * 1.0 / value) * 100;
|
NumberFormat nf1 = NumberFormat.getPercentInstance();
|
nf1.setMinimumFractionDigits(2);
|
String percent2 = nf1.format(percentage1 / 100);
|
|
NumberFormat numberFormat = NumberFormat.getInstance();
|
numberFormat.setMaximumFractionDigits(2);
|
String result = numberFormat.format((float) value1 / (float) value2 * 100);
|
res1.get(i).put("boy1", percent1);
|
res1.get(i).put("girl1", percent2);
|
res1.get(i).put("value1", result);
|
|
}
|
|
}
|
all.put("data", res1);
|
return all;
|
|
}
|
|
|
@GetMapping("/tuanDuiYiChang")
|
@ApiOperation(value = "生成团队体检报告——异常结果统计")
|
public Map<String, List<Map<String, Object>>> tuanDuiYiChang(@ApiParam(value = "单位") @RequestParam String firmId,
|
@ApiParam(value = "部门") @RequestParam String firmDeptId) {
|
|
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);
|
final List<TjOrder> list = tjOrderService.list(wq2);
|
|
List<TjOrderDetailRules> res11 = new ArrayList<>();
|
for (TjOrder tjOrder : list) {
|
LambdaQueryWrapper<TjOrderDetailRules> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjOrderDetailRules::getTjNumber, tjOrder.getTjNumber());
|
final List<TjOrderDetailRules> list1 = detailRulesService.list(wq1);
|
//放进集合
|
res11.addAll(list1);
|
}
|
//去重收集
|
Map<String, Long> columnCountMap = res11.stream().collect(Collectors.groupingBy(TjOrderDetailRules::getAid, Collectors.counting()));
|
List<Map<String, Object>> aaa = new ArrayList<>();
|
if (columnCountMap != null) {
|
for (Map.Entry<String, Long> entry : columnCountMap.entrySet()) {
|
Map<String, Object> resMap = new HashMap<>();
|
final TjRules byId = rulesService.getById(entry.getKey());
|
if (byId != null) {
|
resMap.put("name", byId.getBingzhong());
|
resMap.put("value", String.valueOf(entry.getValue()));
|
aaa.add(resMap);
|
}
|
}
|
}
|
all.put("data", aaa);
|
return all;
|
|
}
|
|
@GetMapping("/tuanDuiYiChangBySex")
|
@ApiOperation(value = "生成团队体检报告——男女异常结果统计")
|
public Map<String, List<Map<String, Object>>> tuanDuiYiChangBySex(@ApiParam(value = "单位") @RequestParam String firmId,
|
@ApiParam(value = "部门") @RequestParam String firmDeptId) {
|
|
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);
|
final List<TjOrder> list = tjOrderService.list(wq2);
|
|
List<String> tjNumberList = list.stream().map(TjOrder::getTjNumber).collect(Collectors.toList());
|
|
List<TjOrderDetailRules> res11 = new ArrayList<>();
|
for (TjOrder tjOrder : list) {
|
LambdaQueryWrapper<TjOrderDetailRules> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjOrderDetailRules::getTjNumber, tjOrder.getTjNumber());
|
final List<TjOrderDetailRules> list1 = detailRulesService.list(wq1);
|
//放进集合
|
res11.addAll(list1);
|
}
|
//去重收集
|
Map<String, Long> columnCountMap = res11.stream().collect(Collectors.groupingBy(TjOrderDetailRules::getAid, Collectors.counting()));
|
|
List<Map<String, Object>> aaa = new ArrayList<>();
|
if (columnCountMap != null) {
|
|
for (Map.Entry<String, Long> entry : columnCountMap.entrySet()) {
|
int a = 0;
|
int b = 0;
|
Map<String, Object> resMap = new HashMap<>();
|
final TjRules byId = rulesService.getById(entry.getKey());
|
if (byId != null) {
|
resMap.put("name", byId.getBingzhong());
|
resMap.put("value", entry.getValue().intValue());
|
resMap.put("boy", a);
|
resMap.put("girl", b);
|
resMap.put("value1", 0);
|
resMap.put("boy1", 0);
|
resMap.put("girl1", 0);
|
|
//
|
LambdaQueryWrapper<TjOrderDetailRules> wq11 = new LambdaQueryWrapper<>();
|
wq11.eq(TjOrderDetailRules::getAid, entry.getKey());
|
wq11.in(TjOrderDetailRules::getTjNumber, tjNumberList);
|
final List<TjOrderDetailRules> list1 = detailRulesService.list(wq11);
|
for (TjOrderDetailRules orderDetailRules : list1) {
|
resMap.put("name", orderDetailRules.getBingzhong());
|
if ("0".equals(orderDetailRules.getCusSex())) {
|
a += 1;
|
resMap.put("boy", a);
|
} else if ("1".equals(orderDetailRules.getCusSex())) {
|
b += 1;
|
resMap.put("girl", b);
|
}
|
}
|
aaa.add(resMap);
|
}
|
}
|
}
|
|
//计算百分数
|
for (int i = 0; i < aaa.size(); i++) {
|
final Integer value1 = (Integer) aaa.get(i).get("boy");
|
final Integer value2 = (Integer) aaa.get(i).get("girl");
|
final Integer value = (Integer) aaa.get(i).get("value");
|
if (value != 0) {
|
double percentage = (value1 * 1.0 / value) * 100;
|
NumberFormat nf = NumberFormat.getPercentInstance();
|
nf.setMinimumFractionDigits(2);
|
String percent1 = nf.format(percentage / 100);
|
|
double percentage1 = (value2 * 1.0 / value) * 100;
|
NumberFormat nf1 = NumberFormat.getPercentInstance();
|
nf1.setMinimumFractionDigits(2);
|
String percent2 = nf1.format(percentage1 / 100);
|
|
NumberFormat numberFormat = NumberFormat.getInstance();
|
numberFormat.setMaximumFractionDigits(2);
|
String result = numberFormat.format((float) value1 / (float) value2 * 100);
|
aaa.get(i).put("boy1", percent1);
|
aaa.get(i).put("girl1", percent2);
|
aaa.get(i).put("value1", result);
|
|
}
|
}
|
all.put("data", aaa);
|
return all;
|
|
}
|
|
@GetMapping("/reportHistory")
|
@ApiOperation(value = "历史报告")
|
public AjaxResult reportHistory(Long cusId) {
|
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){
|
for (TjOrder tjOrder : orderList) {
|
if (tjOrder!=null){
|
LambdaQueryWrapper<TjReport> wq = new LambdaQueryWrapper<>();
|
wq.eq(TjReport::getTjNumber, tjOrder.getTjNumber());
|
wq.eq(TjReport::getType,"体检报告");
|
TjReport one = tjReportService.getOne(wq);
|
if(null !=one){
|
res.add(one);
|
}
|
}
|
}
|
return AjaxResult.success(res);
|
}
|
return AjaxResult.error("暂无历史报告");
|
}
|
}
|