diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java index ff9ff3c..6433dc0 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java @@ -17,11 +17,15 @@ import com.czlis.interfaceCommon.pojo.entity.BackPaperDetail; import com.czlis.interfaceCommon.pojo.entity.BackPaperParam; import com.czlis.interfaceCommon.pojo.entity.LabRptgetruledetailCX; import com.czlis.interfaceCommon.pojo.entity.BarCodeParam; +import com.itextpdf.io.source.ByteArrayOutputStream; +import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.PdfReader; import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.kernel.pdf.canvas.PdfCanvas; +import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; import com.itextpdf.layout.Canvas; import com.itextpdf.layout.element.Image; import lombok.extern.slf4j.Slf4j; @@ -31,6 +35,7 @@ import org.springframework.stereotype.Component; import javax.sql.DataSource; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.sql.Connection; @@ -401,4 +406,61 @@ public class ReportUtil { } return httpPath+"/"+filepath; } + + public static String convertA5ToA4Blank(String a5PdfBase64) throws IOException { + // 1. 清理并解码Base64(必做:去除可能的data前缀) + String pureBase64 = a5PdfBase64.replaceFirst("^data:application/pdf;base64,", ""); + byte[] a5PdfBytes = org.apache.commons.codec.binary.Base64.decodeBase64(pureBase64); + if (a5PdfBytes.length < 100) { + throw new IllegalArgumentException("原Base64不是有效PDF(字节数过少)"); + } + + // 2. 读取原A5 PDF + ByteArrayInputStream a5Stream = new ByteArrayInputStream(a5PdfBytes); + PdfReader reader = new PdfReader(a5Stream); + PdfDocument originalDoc = new PdfDocument(reader); + if (originalDoc.getNumberOfPages() == 0) { + originalDoc.close(); + reader.close(); + throw new IllegalArgumentException("原A5 PDF无页面"); + } + PdfPage originalPage = originalDoc.getPage(1); + + // 3. 初始化A4 PDF输出流 + ByteArrayOutputStream a4OutStream = new ByteArrayOutputStream(); + PdfWriter writer = new PdfWriter(a4OutStream); + PdfDocument a4Doc = new PdfDocument(writer); + + // 4. 创建A4横向页面 + Rectangle a4Landscape = (Rectangle) PageSize.A4.rotate(); // 显式强转,消除类型歧义 + PdfPage a4Page = a4Doc.addNewPage((PageSize) a4Landscape); + PdfCanvas pdfCanvas = new PdfCanvas(a4Page); + + + Canvas canvas = new Canvas(pdfCanvas, a4Landscape); + + // 5. 正确转换原页面并绘制(无参数错误) + PdfFormXObject formX = originalPage.copyAsFormXObject(a4Doc); + Image a5Image = new Image(formX); + // 固定A5尺寸,位置靠左(右侧留空白) + a5Image.setWidth(PageSize.A5.getWidth()) + .setHeight(PageSize.A5.getHeight()) + .setFixedPosition(0, 0); + canvas.add(a5Image); + + // 6. 按顺序关闭资源(关键:先关画布,再关文档,最后读流) + canvas.close(); // 确保内容刷入PDF + a4Doc.close(); // 关闭A4文档,触发内容写入输出流 + writer.close(); // 关闭Writer + originalDoc.close(); // 关闭原文档 + reader.close(); // 关闭Reader + + // 7. 生成最终Base64 + byte[] a4PdfBytes = a4OutStream.toByteArray(); + if (a4PdfBytes.length < 200) { + throw new RuntimeException("生成的A4 PDF内容异常"); + } + return org.apache.commons.codec.binary.Base64.encodeBase64String(a4PdfBytes); + } + } diff --git a/liswork/src/main/java/com/czlis/liswork/controller/dict/ReportItemController.java b/liswork/src/main/java/com/czlis/liswork/controller/dict/ReportItemController.java index ccce3ab..937da91 100644 --- a/liswork/src/main/java/com/czlis/liswork/controller/dict/ReportItemController.java +++ b/liswork/src/main/java/com/czlis/liswork/controller/dict/ReportItemController.java @@ -34,7 +34,6 @@ public class ReportItemController extends BaseController { @GetMapping("/query") public TableDataInfo query(XmInfoNew xmInfoNew) { startPage(); - log.info("查询列表:"+xmInfoNew); List xmInfoNewList = reportItemService.query(xmInfoNew); return getDataTable(xmInfoNewList); } @@ -71,7 +70,7 @@ public class ReportItemController extends BaseController { @ApiOperation("修改检验项目") @PostMapping("/update") public Result update(@RequestBody XmInfoNewDTO xmInfoNewDTO){ - log.info("入参xmInfoNewDTO:{}",xmInfoNewDTO); + log.info("修改数据,入参xmInfoNewDTO:{}",xmInfoNewDTO); return reportItemService.update(xmInfoNewDTO); } @@ -98,8 +97,8 @@ public class ReportItemController extends BaseController { @Log(title = SysLogConstants.XMFILTER_LOG,businessType = BusinessType.INSERT) @ApiOperation("新增滤光片波长对照表") @PostMapping("/addXmFilter") - public Result addXmFilter(@RequestBody XmFilter xmFilter){ - return reportItemService.addXmFilter(xmFilter); + public Result addXmFilter(@RequestBody List xmFilterList){ + return reportItemService.addXmFilter(xmFilterList); } @Log(title = SysLogConstants.XMFILTER_LOG,businessType = BusinessType.DELETE) @@ -170,7 +169,7 @@ public class ReportItemController extends BaseController { return reportItemService.queryBatch(xmInfoNew); } - @Anonymous + @Log(title = SysLogConstants.REPORTITEM_LOG,businessType = BusinessType.INSERT_VS) @ApiOperation("批量新增数据") @PostMapping("/addBatch") @@ -178,11 +177,22 @@ public class ReportItemController extends BaseController { return reportItemService.addBatch(xmInfoNewList); } - @Anonymous + @Log(title = SysLogConstants.REPORTITEM_LOG,businessType = BusinessType.DELETE) @ApiOperation("批量删除对应") @PostMapping("/delBatch") - public Result delBatch(@RequestBody List vsidList ){ - return reportItemService.delBatch(vsidList); + public Result delBatch(@RequestBody List xmInfoNewList ){ + return reportItemService.delBatch(xmInfoNewList); + } + + @Log(title = SysLogConstants.REPORTITEM_LOG,businessType = BusinessType.DELETE) + @ApiOperation("删除参考值明细") + @GetMapping("/delXmRefNew") + public Result delXmRefNew(XmRefNew xmRefNew){ + if(xmRefNew == null) return new Result("-1","入参不能为空!"); + if(xmRefNew.getXmid() == null) return new Result("-1","项目ID不能为空!"); + if(xmRefNew.getXh() == null) return new Result("-1","项目序号不能为空!"); + return reportItemService.delXmRefNew(xmRefNew); + } } diff --git a/liswork/src/main/java/com/czlis/liswork/mapper/dict/ReportItemMapper.java b/liswork/src/main/java/com/czlis/liswork/mapper/dict/ReportItemMapper.java index b3b37cb..aa2040c 100644 --- a/liswork/src/main/java/com/czlis/liswork/mapper/dict/ReportItemMapper.java +++ b/liswork/src/main/java/com/czlis/liswork/mapper/dict/ReportItemMapper.java @@ -24,7 +24,7 @@ public interface ReportItemMapper { void deleteXmDouble(XmDouble xmDouble); void deleteXmInter(XmInter xmInter); void deleteXmTextResult(XmTextresultNew xmTextresultNew); - void deleteXmRef(XmRefNew xmRefNew); + void deleteXmRefNew(XmRefNew xmRefNew); void deleteXmValNew(XmValNew xmValNew); Long getXmInfoVsCount(Integer xmid); @@ -36,6 +36,7 @@ public interface ReportItemMapper { void updateXmValNewRow(XmValNew xmValRow); void updateXmTextResultRow(XmTextresultNew xmTextResultRow); void updateXminfoVs(XmInfoVs xmInfoVs); + void updateXmFilter(XmFilter xmFilter); void addXmInfoVs(XmInfoVs xmInfoVs); void deleteXmInfoVs(Integer vsid); @@ -66,5 +67,5 @@ public interface ReportItemMapper { void addBatch(@Param("xmInfoNewList") List xmInfoNewList); - void delBatch(@Param("vsidList") List vsidList); + void delBatch(@Param("xmInfoNewList") List xmInfoNewList); } diff --git a/liswork/src/main/java/com/czlis/liswork/service/ReportItemService.java b/liswork/src/main/java/com/czlis/liswork/service/ReportItemService.java index a784bf8..70dab39 100644 --- a/liswork/src/main/java/com/czlis/liswork/service/ReportItemService.java +++ b/liswork/src/main/java/com/czlis/liswork/service/ReportItemService.java @@ -22,7 +22,7 @@ public interface ReportItemService { Result getXmFilter(XmFilter xmFilter); - Result addXmFilter(XmFilter xmFilter); + Result addXmFilter(List xmFilter); Result deleteXmFilter(String yq, String lgph); @@ -50,5 +50,7 @@ public interface ReportItemService { Result addBatch(List xmInfoNewList); - Result delBatch(List vsidList); + Result delBatch(List xmInfoNewList); + + Result delXmRefNew(XmRefNew xmRefNew); } diff --git a/liswork/src/main/java/com/czlis/liswork/service/impl/ReportItemServiceImpl.java b/liswork/src/main/java/com/czlis/liswork/service/impl/ReportItemServiceImpl.java index 29003fc..b5297d1 100644 --- a/liswork/src/main/java/com/czlis/liswork/service/impl/ReportItemServiceImpl.java +++ b/liswork/src/main/java/com/czlis/liswork/service/impl/ReportItemServiceImpl.java @@ -120,7 +120,7 @@ public class ReportItemServiceImpl implements ReportItemService { reportItemMapper.deleteXmTextResult(xmTextresultNew); XmRefNew xmRefNew = new XmRefNew(); xmRefNew.setXmid(xmInfoNew.getXmid()); - reportItemMapper.deleteXmRef(xmRefNew); + reportItemMapper.deleteXmRefNew(xmRefNew); XmValNew xmValNew = new XmValNew(); xmValNew.setXmid(xmid); reportItemMapper.deleteXmValNew(xmValNew); @@ -272,8 +272,17 @@ public class ReportItemServiceImpl implements ReportItemService { } @Override - public Result addXmFilter(XmFilter xmFilter) { - reportItemMapper.addXmFilter(xmFilter); + public Result addXmFilter(List xmFilterList) { + for (XmFilter xmFilter : xmFilterList) { + List xmFilterListOne = reportItemMapper.getXmFilter(xmFilter); + if(xmFilterListOne.size() > 0){ + reportItemMapper.updateXmFilter(xmFilter); + }else{ + reportItemMapper.addXmFilter(xmFilter); + } + + } + return new Result("0","新增成功!"); } @@ -381,10 +390,17 @@ public class ReportItemServiceImpl implements ReportItemService { } @Override - public Result delBatch(List vsidList) { - reportItemMapper.delBatch(vsidList); + public Result delBatch(List xmInfoNewList) { + + reportItemMapper.delBatch(xmInfoNewList); return new Result("0","批量删除数据成功!"); } + @Override + public Result delXmRefNew(XmRefNew xmRefNew) { + reportItemMapper.deleteXmRefNew(xmRefNew); + return new Result("0","删除成功!"); + } + } diff --git a/liswork/src/main/resources/mapper/ReportItemMapper.xml b/liswork/src/main/resources/mapper/ReportItemMapper.xml index 39300cc..5a10186 100644 --- a/liswork/src/main/resources/mapper/ReportItemMapper.xml +++ b/liswork/src/main/resources/mapper/ReportItemMapper.xml @@ -363,8 +363,9 @@ delete from xm_textresult_new where xmid = #{xmid} - + delete from xm_ref_new where xmid = #{xmid} + and xh = #{xh} @@ -485,6 +486,10 @@ where xmid = #{xmid} and yq = #{yq} + + update xm_filter set lgph = #{lgph} , bc = #{bc} where yq = #{yq} and lgph = #{lgph} + + delete from xm_info_vs where vsid = #{vsid} @@ -494,6 +499,8 @@ select * from xm_filter and yq = #{yq} + and lgph = #{lgph} + and bc = #{bc} @@ -526,7 +533,7 @@ - delete from xm_log where yq = #{yq} and sjph = #{sjph} + delete from xm_lot where yq = #{yq} and sjph = #{sjph} @@ -589,9 +597,9 @@ - delete from xm_info_vs where vsid in - - #{vsid} + delete from xm_info_vs where (yq,xmid) in + + (#{xmInfoNew.yq},#{xmInfoNew.xmid}) diff --git a/zybgcx/src/main/java/com/czlis/zybgcx/service/impl/ZybgcxServcieImpl.java b/zybgcx/src/main/java/com/czlis/zybgcx/service/impl/ZybgcxServcieImpl.java index b5d33d1..ef36622 100644 --- a/zybgcx/src/main/java/com/czlis/zybgcx/service/impl/ZybgcxServcieImpl.java +++ b/zybgcx/src/main/java/com/czlis/zybgcx/service/impl/ZybgcxServcieImpl.java @@ -70,6 +70,8 @@ public class ZybgcxServcieImpl implements ZybgcxService { public Result printReport(String[] bgdh) { List> bgdhBase64List = new ArrayList<>(); List mergeBgdhList = new ArrayList<>(); + String brdh = ""; + int j = 0; for (String string : bgdh) { String[] stringParam = StrUtil.splitToArray(string, "_"); if(stringParam.length != 3) return new Result("-1","传入的报告单号不对!"+ Arrays.toString(stringParam)); @@ -80,7 +82,11 @@ public class ZybgcxServcieImpl implements ZybgcxService { if(labReqreportPdffileOne == null) continue; LabPat labPatOne = commonUtil.getLabPatOne(DateUtil.parse(jyrqStr, "yyyyMMdd"), yq, ybh); if(labPatOne == null) return new Result("-1","未找到该报告单的信息!"+ Arrays.toString(stringParam)); + if(j > 0){ + if(!brdh.equals(labPatOne.getBrdh())) return new Result("-1","只能选中一个病人的报告单打印!"); + } String base64PDF = labReqreportPdffileOne.getBASE64PDF(); + if(base64PDF == null || base64PDF.equals("")) continue; Map map = new HashMap<>(); map.put("data", base64PDF); @@ -90,8 +96,10 @@ public class ZybgcxServcieImpl implements ZybgcxService { map.put("brdh",labPatOne.getBrdh()); map.put("confirmdt",labPatOne.getConfirmdt()); bgdhBase64List.add(map); + brdh = labPatOne.getBrdh(); + j++; } - log.info("bgdhBase64List:"+bgdhBase64List); + //log.info("bgdhBase64List:"+bgdhBase64List); //过滤A4的报告单 List> collectA4 = bgdhBase64List.stream().filter(bgdhBase64 -> bgdhBase64.get("pageType").equals("A4")).collect(Collectors.toList()); for (Map stringObjectMap : collectA4) { @@ -113,7 +121,7 @@ public class ZybgcxServcieImpl implements ZybgcxService { } } - log.info("collectA5:"+collectA5); + //log.info("collectA5:"+collectA5); //对A5格式的报告单进行排序 collectA5.sort(new Comparator>() { @@ -134,10 +142,25 @@ public class ZybgcxServcieImpl implements ZybgcxService { //合并A5格式的pdf为A4格式 + String A5BlankStr = ""; for (int i = 0; i < collectA5.size(); i++) { if(i+1 >= collectA5.size()){ - //代表到了最后一个单数 - mergeBgdhList.add(collectA5.get(i).get("data").toString()); + //代表到了最后一个单数,把这个A5格式的先转换成A4格式的pdf + try { + A5BlankStr = reportUtil.convertA5ToA4Blank(collectA5.get(i).get("data").toString()); + //旋转90度,把之前的文件变成pdf + String path2 = RuoYiConfig.getProfile() +"/config/static/printPDF/"+UUID.randomUUID().toString()+".pdf"; + String path3 = RuoYiConfig.getProfile() +"/config/static/printPDF/"+UUID.randomUUID().toString()+".pdf"; + Base64.decodeToFile(A5BlankStr,new File(path2)); + reportUtil.rotatePdf90Degrees(path2,path3,1); + A5BlankStr = Base64.encode(new File(path3)); + //删除文件 + FileUtils.deleteFile(path2); + FileUtils.deleteFile(path3); + } catch (IOException e) { + log.error("把A5格式的pdf增加空白变成A4格式的pdf失败:",e); + } + mergeBgdhList.add(A5BlankStr); break; } String path = RuoYiConfig.getProfile() +"/config/static/printPDF/"+UUID.randomUUID().toString()+".pdf"; @@ -161,7 +184,7 @@ public class ZybgcxServcieImpl implements ZybgcxService { String encode = ""; try { - //合并成一个pdf + //合并成一个pdf交给前端 String pdfName = UUID.randomUUID().toString(); String path = RuoYiConfig.getProfile() +"/config/static/printPDF/"+pdfName+".pdf"; LisUtil.mergeToFile(mergeBgdhList,path);