From 087fc990b5aa90084661a305675d0fee18dbec59 Mon Sep 17 00:00:00 2001 From: "15881625488@163.com" <15881625488@163.com> Date: Mon, 19 Jan 2026 10:15:35 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E7=BF=BB=E8=AF=91=E8=A1=A5?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StudyFormFillController.java | 25 +- .../hxhq/business/domain/StudyFormFillJcgj.java | 13 ++ .../java/com/hxhq/business/utils/GyzjJcnrUtil.java | 14 +- .../java/com/hxhq/business/utils/MjyJcnrUtil.java | 16 +- .../java/com/hxhq/business/utils/TemplateUtil.java | 113 +++++++++ .../com/hxhq/business/utils/pdf/PdfExportUtil.java | 12 + .../hxhq/business/utils/pdf/resource/Dosage.java | 76 +++--- .../com/hxhq/business/utils/pdf/resource/Drug.java | 77 +++--- .../hxhq/business/utils/pdf/template/SP001.java | 258 +++++++++++++++++++++ .../hxhq/business/utils/pdf/template/sp/Sp001.java | 248 -------------------- 10 files changed, 502 insertions(+), 350 deletions(-) create mode 100644 hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/TemplateUtil.java create mode 100644 hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/SP001.java delete mode 100644 hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/sp/Sp001.java diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/controller/StudyFormFillController.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/controller/StudyFormFillController.java index 454c1f2..21cb675 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/controller/StudyFormFillController.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/controller/StudyFormFillController.java @@ -34,6 +34,8 @@ public class StudyFormFillController extends BaseController { private IStudyFormFillJcgjService studyFormFillJcgjService; @Autowired private IStudyFormFillQmxxService studyFormFillQmxxService; + @Autowired + private ITemplateService templateService; /** * 上传文件存储在本地的根路径 */ @@ -98,13 +100,22 @@ public class StudyFormFillController extends BaseController { StudyFormFillQmxx studyFormFillQmxx = new StudyFormFillQmxx(); studyFormFillQmxx.setFormId(form.getFormId()); List studyFormFillQmxxList = studyFormFillQmxxService.queryList(studyFormFillQmxx); - return AjaxResult.success(localFilePrefix + PdfExportUtil.export( - "com.hxhq.business.utils.pdf.template.sp.Sp001", - "exportDetail", - studyFormFillService.queryInfo(form.getFormId()), - studyFormFillQmxxList, - studyFormFillJcgjList, - localFilePath)); + StudyFormFill studyFormFill=studyFormFillService.getById(form.getFormId()); + Template template=templateService.getById(studyFormFill.getTemplateId()); + if(template!=null){ + return AjaxResult.success(localFilePrefix + PdfExportUtil.export( + "com.hxhq.business.utils.pdf.template."+template.getSn(), + "exportDetail", + studyFormFill, + template, + studyFormFillQmxxList, + studyFormFillJcgjList, + form.getLang(), + localFilePath)); + }else{ + return AjaxResult.error("模板不存在或已删除"); + } + } /** diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/domain/StudyFormFillJcgj.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/domain/StudyFormFillJcgj.java index 5a351b3..bf86149 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/domain/StudyFormFillJcgj.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/domain/StudyFormFillJcgj.java @@ -1,5 +1,6 @@ package com.hxhq.business.domain; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.hxhq.common.core.domain.MpBaseEntity; @@ -45,6 +46,18 @@ public class StudyFormFillJcgj extends MpBaseEntity /** 签名人名称-英文 */ private String qmrMcEn; + /** 语言 */ + @TableField(exist = false) + private String lang; + + public String getLang() { + return lang; + } + + public void setLang(String lang) { + this.lang = lang; + } + public String getJcmcEn() { return jcmcEn; } diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/GyzjJcnrUtil.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/GyzjJcnrUtil.java index a7d5f42..3b08616 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/GyzjJcnrUtil.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/GyzjJcnrUtil.java @@ -15,7 +15,7 @@ public class GyzjJcnrUtil { private static HashMap mapLang=new HashMap<>(); static { mapLang.put("入库","In Storage"); - mapLang.put("未入库","未入库"); + mapLang.put("未入库","Not in Storage"); mapLang.put("已发放","In Use"); mapLang.put("已锁定","'Locked'"); mapLang.put("待归档","Pending Archiving"); @@ -98,12 +98,12 @@ public class GyzjJcnrUtil { mapLang.put("取出","Take Out"); mapLang.put("表单名称","Preset Name"); - mapLang.put("锁定发放记录","锁定发放记录"); - mapLang.put("解锁发放记录","解锁发放记录"); - mapLang.put("给药制剂入库","给药制剂入库"); - mapLang.put("同意入库","同意入库"); - mapLang.put("拒绝入库","拒绝入库"); - mapLang.put("目的","目的"); + mapLang.put("锁定发放记录","Lock Record"); + mapLang.put("解锁发放记录","Unlock Record"); + mapLang.put("给药制剂入库","Dose Formulation Check-in"); + mapLang.put("同意入库","Approve Check-in"); + mapLang.put("拒绝入库","Reject Check-in"); + mapLang.put("目的","Purpose"); } diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/MjyJcnrUtil.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/MjyJcnrUtil.java index 97792c2..6b73853 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/MjyJcnrUtil.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/MjyJcnrUtil.java @@ -16,7 +16,7 @@ public class MjyJcnrUtil { private static HashMap mapLang=new HashMap<>(); static { mapLang.put("入库","In Storage"); - mapLang.put("未入库","未入库"); + mapLang.put("未入库","Not in Storage"); mapLang.put("已发放","In Use"); mapLang.put("已锁定","'Locked'"); mapLang.put("待归档","Pending Archiving"); @@ -94,10 +94,10 @@ public class MjyJcnrUtil { mapLang.put("取出","Take Out"); mapLang.put("表单名称","Preset Name"); - mapLang.put("锁定发放记录","锁定发放记录"); - mapLang.put("解锁发放记录","解锁发放记录"); - mapLang.put("麻精药入库","麻精药入库"); - mapLang.put("目的","目的"); + mapLang.put("锁定发放记录","Lock Record"); + mapLang.put("解锁发放记录","Unlock Record"); + mapLang.put("麻精药入库","Controlled Drug Check-in"); + mapLang.put("目的","Purpose"); mapLang.put("入库位置","入库位置"); mapLang.put("入库条件","入库条件"); mapLang.put("减少量","减少量"); @@ -112,7 +112,7 @@ public class MjyJcnrUtil { logger.info(getJcnrEn(formData)); } /** - * 获取签名意义英文 + * 获取英文 * @param qmyy * @return */ @@ -121,7 +121,7 @@ public class MjyJcnrUtil { } /** - * 稽查名称英文 + * 获取稽查内容英文 * @param map * @return */ @@ -134,7 +134,7 @@ public class MjyJcnrUtil { } /** - * 稽查名称英文 + * 获取稽查内容英文 * @param map * @return */ diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/TemplateUtil.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/TemplateUtil.java new file mode 100644 index 0000000..dc688cb --- /dev/null +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/TemplateUtil.java @@ -0,0 +1,113 @@ +package com.hxhq.business.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author tanfei + */ +public class TemplateUtil { + private static final Logger logger = LoggerFactory.getLogger(TemplateUtil.class.getName()); + private static HashMap mapLang=new HashMap<>(); + static { + mapLang.put("试验基本信息","Test Basic Information"); + mapLang.put("试验试剂信息","Test Reagent Information"); + mapLang.put("仪器使用信息","Instrument Usage Information"); + mapLang.put("存储条件","Storage Conditions"); + mapLang.put("操作步骤","Operation Steps"); + mapLang.put("备注","Remarks"); + + mapLang.put("试验名称","Study Name"); + mapLang.put("试验编号","Study Number"); + mapLang.put("方法编号","Method Code"); + mapLang.put("版本号","Version Number"); + mapLang.put("试验配制条件","Study Configuration Conditions"); + mapLang.put("预填","Pre-Fill"); + mapLang.put("实际","Actual"); + mapLang.put("配置时间","Configuration Time"); + mapLang.put("开始时间","Start Time"); + mapLang.put("结束时间","End Time"); + mapLang.put("目标溶液名称","Target Solution Name"); + mapLang.put("目标溶液编号","Target Solution Code"); + mapLang.put("目标溶液预计浓度","Target Solution Expected Concentration"); + mapLang.put("目标溶液实际浓度","Target Solution Actual Concentration"); + mapLang.put("目标溶液预计体积","Target Solution Expected Volume"); + mapLang.put("目标溶液实际体积","Target Solution Actual Volume"); + mapLang.put("有效周期","Effective Period"); + mapLang.put("失效日","Expiry Date"); + mapLang.put("处理批编号","Analysis Batch Number"); + mapLang.put("容器材质","Container Material"); + mapLang.put("处理时间","Work Time"); + + mapLang.put("试剂名称","Reagent Name"); + mapLang.put("编号","Code"); + mapLang.put("批号","Batch Number"); + mapLang.put("浓度/含量/纯度","Concentration/Content/Purity"); + mapLang.put("来源","Source"); + + + mapLang.put("仪器名称","Instrument Name"); + mapLang.put("仪器型号","Instrument Model"); + mapLang.put("仪器编号","Instrument Number"); + mapLang.put("下次测试/校准/检定日期","Next Test/Calibration/Verification Date"); + + mapLang.put("给药剂量或组别","Administration Dose or Group"); + mapLang.put("配制浓度","Preparation Concentration"); + mapLang.put("配制体积","Preparation Volume"); + mapLang.put("其他","Other"); + mapLang.put("其他信息","Other Information"); + mapLang.put("单位","unit"); + + mapLang.put("签名人","Signed By"); + mapLang.put("签名意义","Meaning of Signature"); + mapLang.put("签名时间","Date"); + mapLang.put("备注原因","Comment/Reason"); + + } + + public static void main(String[] args) { + Map formData = new LinkedHashMap<>(); + formData.put("申请备注", "1111"); + formData.put("审核备注", "22"); + logger.info(getJcnrEn(formData)); + } + /** + * 获取英文 + * @param qmyy + * @return + */ + public static String getEn(String qmyy) { + return mapLang.get(qmyy); + } + + /** + * 获取稽查内容英文 + * @param map + * @return + */ + public static String getJcnrEn(Map map) { + Map result =new LinkedHashMap<>(); + for (Map.Entry entry : map.entrySet()) { + result.put(mapLang.get(entry.getKey()),entry.getValue()); + } + return JctUtil.formatStr(result); + } + + /** + * 获取稽查内容英文 + * @param map + * @return + */ + public static Map getMapEn(Map map) { + Map result =new LinkedHashMap<>(); + for (Map.Entry entry : map.entrySet()) { + result.put(mapLang.get(entry.getKey()),entry.getValue()); + } + return result; + } + +} diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/PdfExportUtil.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/PdfExportUtil.java index 679dc40..4923a07 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/PdfExportUtil.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/PdfExportUtil.java @@ -1,11 +1,13 @@ package com.hxhq.business.utils.pdf; import com.hxhq.common.core.exception.ServiceException; +import com.hxhq.common.core.utils.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.lang.reflect.Method; +import java.util.Date; /** * pdf导出基类 @@ -63,4 +65,14 @@ public class PdfExportUtil { throw new ServiceException(ex.getMessage()); } } + + /** + * 时间转化 + * @param time + * @return + */ + public static String parseDateToStr(Date time){ + return DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",time); + } + } \ No newline at end of file diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Dosage.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Dosage.java index 086993f..b884f0f 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Dosage.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Dosage.java @@ -8,6 +8,7 @@ import com.hxhq.business.dto.gyzj.DetailDto; import com.hxhq.business.enums.zykgl.ZjztEnum; import com.hxhq.business.utils.GyzjJcnrUtil; import com.hxhq.business.utils.pdf.PdfBaseUtil; +import com.hxhq.business.utils.pdf.PdfExportUtil; import com.hxhq.common.core.utils.StringUtils; import com.hxhq.common.security.utils.SecurityUtils; import com.hxhq.system.api.model.LoginUser; @@ -17,10 +18,8 @@ import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.io.FileOutputStream; import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.List; import java.util.*; @@ -31,7 +30,7 @@ import java.util.*; */ public class Dosage { private static final Logger logger = LoggerFactory.getLogger(Dosage.class.getName()); - + public String language="zh"; /** * 导出 * @@ -39,40 +38,40 @@ public class Dosage { * @return */ public String exportDetail(DetailDto gyzj, List gyzjTzList, List gyzjJcgjList, String lang, String localFilePath) { + language=lang; Document document = null; FileOutputStream fos = null; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String filePath = PdfBaseUtil.getFilePath(localFilePath); try { - String sign = "en".equals(lang) ? "hxhq" : "华西海圻"; + String sign = "hxhq"; LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null) { sign = loginUser.getSysUser().getNickName(); } - document = PdfBaseUtil.init(document, fos, filePath, sign + sdf.format(new Date()), null); + document = PdfBaseUtil.init(document, fos, filePath, sign + PdfExportUtil.parseDateToStr(new Date()), null); // 基本信息 - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? GyzjJcnrUtil.getEn("基本信息") : "基本信息", 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("基本信息"), 10, true); Map formData1 = new LinkedHashMap<>(); - formData1.put("名称", gyzj.getMc()); - formData1.put("编号", gyzj.getBh()); - formData1.put("浓度", gyzj.getNd() + gyzj.getNddw()); - formData1.put("库存量", gyzj.getKc() + gyzj.getKcdw()); - formData1.put("失效日期", sdf.format(gyzj.getSxrq())); - formData1.put("存储条件", gyzj.getCctj()); - formData1.put("存储位置", gyzj.getCcwz()); - formData1.put("制剂状态", "en".equals(lang) ? (GyzjJcnrUtil.getEn(ZjztEnum.getEnumByValue(gyzj.getZjzt()).getText())) : ZjztEnum.getEnumByValue(gyzj.getZjzt()).getText()); - PdfBaseUtil.addFormTableColumns(document, "en".equals(lang) ? GyzjJcnrUtil.getMapEn(formData1) : formData1, 2); + formData1.put(getName("名称"), gyzj.getMc()); + formData1.put(getName("编号"), gyzj.getBh()); + formData1.put(getName("浓度"), gyzj.getNd() + gyzj.getNddw()); + formData1.put(getName("库存量"), gyzj.getKc() + gyzj.getKcdw()); + formData1.put(getName("失效日期"), PdfExportUtil.parseDateToStr(gyzj.getSxrq())); + formData1.put(getName("存储条件"), gyzj.getCctj()); + formData1.put(getName("存储位置"), gyzj.getCcwz()); + formData1.put(getName("制剂状态"), "en".equals(language) ? (GyzjJcnrUtil.getEn(ZjztEnum.getEnumByValue(gyzj.getZjzt()).getText())) : ZjztEnum.getEnumByValue(gyzj.getZjzt()).getText()); + PdfBaseUtil.addFormTableColumns(document, formData1, 2); // 表单信息 - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? GyzjJcnrUtil.getEn("表单信息") : "表单信息", 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("表单信息"), 10, true); Map formData3 = new LinkedHashMap<>(); - formData3.put("所属试验信息", gyzj.getStudyMc()); - formData3.put("所属表单", gyzj.getBdMc()); - formData3.put("表单所属人", gyzj.getBdgsrMc()); - PdfBaseUtil.addFormTableColumns(document, "en".equals(lang) ? GyzjJcnrUtil.getMapEn(formData3) : formData3, 2); - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? GyzjJcnrUtil.getEn("给药制剂台账") : "给药制剂台账", 10, true); + formData3.put(getName("所属试验信息"), gyzj.getStudyMc()); + formData3.put(getName("所属表单"), gyzj.getBdMc()); + formData3.put(getName("表单所属人"), gyzj.getBdgsrMc()); + PdfBaseUtil.addFormTableColumns(document, formData3, 2); + PdfBaseUtil.addUnderlinedTitle(document, getName("给药制剂台账") , 10, true); // 台账 addTz(document, gyzjTzList, lang); - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? GyzjJcnrUtil.getEn("稽查轨迹") : "稽查轨迹", 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("稽查轨迹") , 10, true); //稽查轨迹 addJcgj(document, gyzjJcgjList, lang); logger.info("生成成功:{}", filePath); @@ -103,7 +102,7 @@ public class Dosage { * @throws DocumentException */ public void addTz(Document document, List gyzjTzList, String lang) throws IOException, DocumentException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 9. 表头 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font headerFont = new Font(bfChinese, 8, Font.NORMAL); @@ -111,16 +110,7 @@ public class Dosage { // 8. 创建表格 PdfPTable table = new PdfPTable(8); table.setWidthPercentage(100); - String[] headers = { - "en".equals(lang) ? GyzjJcnrUtil.getEn("使用人") : "使用人", - "en".equals(lang) ? GyzjJcnrUtil.getEn("领取/归还人") : "领取/归还人", - "en".equals(lang) ? GyzjJcnrUtil.getEn("发放/接收人") : "发放/接收人", - "en".equals(lang) ? GyzjJcnrUtil.getEn("操作类型") : "操作类型", - "en".equals(lang) ? GyzjJcnrUtil.getEn("表单名称") : "表单名称", - "en".equals(lang) ? GyzjJcnrUtil.getEn("操作量") : "操作量", - "en".equals(lang) ? GyzjJcnrUtil.getEn("备注/原因") : "备注/原因", - "en".equals(lang) ? GyzjJcnrUtil.getEn("操作时间") : "操作时间" - }; + String[] headers = {getName("使用人"),getName("领取/归还人"),getName("发放/接收人"),getName("操作类型"),getName("表单名称"),getName("操作量"),getName("备注/原因"),getName("操作时间")}; for (String header : headers) { PdfPCell cell = new PdfPCell(new Phrase(header, headerFont)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); @@ -143,7 +133,7 @@ public class Dosage { table.addCell(PdfBaseUtil.createCell(gyzjTz.getBdMc(), contentFont)); table.addCell(PdfBaseUtil.createCell(gyzjTz.getCzl() + gyzjTz.getCzldw(), contentFont)); table.addCell(PdfBaseUtil.createCell(gyzjTz.getRemark(), contentFont)); - table.addCell(PdfBaseUtil.createCell(sdf.format(gyzjTz.getCreateTime()), contentFont)); + table.addCell(PdfBaseUtil.createCell(PdfExportUtil.parseDateToStr(gyzjTz.getCreateTime()), contentFont)); rowNum++; } document.add(table); @@ -158,9 +148,8 @@ public class Dosage { * @throws DocumentException */ public void addJcgj(Document document, List gyzjJcgjList, String lang) throws IOException, DocumentException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (GyzjJcgj jcgj : gyzjJcgjList) { - PdfBaseUtil.addUnderlinedTitle(document, sdf.format(jcgj.getCreateTime()) + " " + ("en".equals(lang) ? GyzjJcnrUtil.getEn(jcgj.getJcmc()) : jcgj.getJcmc()), 10, false); + PdfBaseUtil.addUnderlinedTitle(document, PdfExportUtil.parseDateToStr(jcgj.getCreateTime())+ " " + getName(jcgj.getJcmc()), 10, false); StringJoiner result = new StringJoiner(", "); if ("en".equals(lang)) { if (StringUtils.isNoneBlank(jcgj.getJcnrEn())) { @@ -188,14 +177,23 @@ public class Dosage { } } if (StringUtils.isNoneBlank(jcgj.getRemark())) { - result.add(("en".equals(lang) ? GyzjJcnrUtil.getEn("备注") + ":" : "备注:") + jcgj.getRemark()); + result.add(getName("备注")+":" + jcgj.getRemark()); } if (StringUtils.isNoneBlank(jcgj.getRemark())) { - result.add(("en".equals(lang) ? GyzjJcnrUtil.getEn("签名人") + ":" : "签名人:") + jcgj.getQmrMc()); + result.add(getName("签名人")+":" + jcgj.getQmrMc()); } PdfBaseUtil.addUnderlinedTitle(document, result.toString(), 10, false); } } + /** + * 获取名称 + * @param name + * @return + */ + public String getName(String name){ + return "en".equals(language) ? GyzjJcnrUtil.getEn(name) : name; + } + } diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Drug.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Drug.java index bbf0e3c..d67a7d3 100644 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Drug.java +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/resource/Drug.java @@ -1,14 +1,13 @@ package com.hxhq.business.utils.pdf.resource; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.hxhq.business.domain.*; import com.hxhq.business.dto.mjy.DetailDto; import com.hxhq.business.enums.zykgl.ZjztEnum; -import com.hxhq.business.utils.GyzjJcnrUtil; import com.hxhq.business.utils.MjyJcnrUtil; import com.hxhq.business.utils.pdf.PdfBaseUtil; +import com.hxhq.business.utils.pdf.PdfExportUtil; import com.hxhq.common.core.utils.StringUtils; import com.hxhq.common.security.utils.SecurityUtils; import com.hxhq.system.api.model.LoginUser; @@ -18,10 +17,8 @@ import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.io.FileOutputStream; import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.*; import java.util.List; @@ -32,7 +29,7 @@ import java.util.List; */ public class Drug { private static final Logger logger = LoggerFactory.getLogger(Drug.class.getName()); - + public String language="zh"; /** * 导出 * @@ -40,40 +37,40 @@ public class Drug { * @return */ public String exportDetail(DetailDto mjy, List mjyTzList, List mjyJcgjList, String lang, String localFilePath) { + language=lang; Document document = null; FileOutputStream fos = null; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String filePath = PdfBaseUtil.getFilePath(localFilePath); try { - String sign = "en".equals(lang) ? "hxhq" : "华西海圻"; + String sign = "hxhq" ; LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null) { sign = loginUser.getSysUser().getNickName(); } - document = PdfBaseUtil.init(document, fos, filePath, sign + sdf.format(new Date()), null); + document = PdfBaseUtil.init(document, fos, filePath, sign + PdfExportUtil.parseDateToStr(new Date()), null); // 基本信息 - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? MjyJcnrUtil.getEn("基本信息") : "基本信息", 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("基本信息"), 10, true); Map formData1 = new LinkedHashMap<>(); - formData1.put("名称", mjy.getMc()); - formData1.put("编号", mjy.getBh()); - formData1.put("浓度", mjy.getNd() + mjy.getNddw()); - formData1.put("库存量", mjy.getKc() + mjy.getKcdw()); - formData1.put("失效日期", sdf.format(mjy.getSxrq())); - formData1.put("存储条件", mjy.getCctj()); - formData1.put("存储位置", mjy.getCcwz()); - formData1.put("制剂状态", "en".equals(lang) ? (MjyJcnrUtil.getEn(ZjztEnum.getEnumByValue(mjy.getZjzt()).getText())) : ZjztEnum.getEnumByValue(mjy.getZjzt()).getText()); - PdfBaseUtil.addFormTableColumns(document, "en".equals(lang) ? MjyJcnrUtil.getMapEn(formData1) : formData1, 2); + formData1.put(getName("名称"), mjy.getMc()); + formData1.put(getName("编号"), mjy.getBh()); + formData1.put(getName("浓度"), mjy.getNd() + mjy.getNddw()); + formData1.put(getName("库存量"), mjy.getKc() + mjy.getKcdw()); + formData1.put(getName("失效日期"), PdfExportUtil.parseDateToStr(mjy.getSxrq())); + formData1.put(getName("存储条件"), mjy.getCctj()); + formData1.put(getName("存储位置"), mjy.getCcwz()); + formData1.put(getName("制剂状态"), "en".equals(language) ? (MjyJcnrUtil.getEn(ZjztEnum.getEnumByValue(mjy.getZjzt()).getText())) : ZjztEnum.getEnumByValue(mjy.getZjzt()).getText()); + PdfBaseUtil.addFormTableColumns(document, formData1, 2); // 表单信息 - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? MjyJcnrUtil.getEn("表单信息") : "表单信息", 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("表单信息"), 10, true); Map formData3 = new LinkedHashMap<>(); - formData3.put("所属试验信息", mjy.getStudyMc()); - formData3.put("所属表单", mjy.getBdMc()); - formData3.put("表单所属人", mjy.getBdgsrMc()); - PdfBaseUtil.addFormTableColumns(document, "en".equals(lang) ? MjyJcnrUtil.getMapEn(formData3) : formData3, 2); - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? MjyJcnrUtil.getEn("给药制剂台账") : "给药制剂台账", 10, true); + formData3.put(getName("所属试验信息"), mjy.getStudyMc()); + formData3.put(getName("所属表单"), mjy.getBdMc()); + formData3.put(getName("表单所属人"), mjy.getBdgsrMc()); + PdfBaseUtil.addFormTableColumns(document, formData3, 2); + PdfBaseUtil.addUnderlinedTitle(document, getName("给药制剂台账") , 10, true); // 台账 addTz(document, mjyTzList, lang); - PdfBaseUtil.addUnderlinedTitle(document, "en".equals(lang) ? MjyJcnrUtil.getEn("稽查轨迹") : "稽查轨迹", 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("稽查轨迹") , 10, true); //稽查轨迹 addJcgj(document, mjyJcgjList, lang); logger.info("生成成功:{}", filePath); @@ -104,7 +101,7 @@ public class Drug { * @throws DocumentException */ public void addTz(Document document, List mjyTzList, String lang) throws IOException, DocumentException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 9. 表头 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font headerFont = new Font(bfChinese, 8, Font.NORMAL); @@ -112,16 +109,7 @@ public class Drug { // 8. 创建表格 PdfPTable table = new PdfPTable(8); table.setWidthPercentage(100); - String[] headers = { - "en".equals(lang) ? MjyJcnrUtil.getEn("使用人") : "使用人", - "en".equals(lang) ? MjyJcnrUtil.getEn("领取/归还人") : "领取/归还人", - "en".equals(lang) ? MjyJcnrUtil.getEn("发放/接收人") : "发放/接收人", - "en".equals(lang) ? MjyJcnrUtil.getEn("操作类型") : "操作类型", - "en".equals(lang) ? GyzjJcnrUtil.getEn("表单名称") : "表单名称", - "en".equals(lang) ? MjyJcnrUtil.getEn("操作量") : "操作量", - "en".equals(lang) ? MjyJcnrUtil.getEn("备注/原因") : "备注/原因", - "en".equals(lang) ? MjyJcnrUtil.getEn("操作时间") : "操作时间" - }; + String[] headers = {getName("使用人"),getName("领取/归还人"),getName("发放/接收人"),getName("操作类型"),getName("表单名称"),getName("操作量"),getName("备注/原因"),getName("操作时间")}; for (String header : headers) { PdfPCell cell = new PdfPCell(new Phrase(header, headerFont)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); @@ -144,7 +132,7 @@ public class Drug { table.addCell(PdfBaseUtil.createCell(mjyTz.getBdMc(), contentFont)); table.addCell(PdfBaseUtil.createCell(mjyTz.getCzl() + mjyTz.getCzldw(), contentFont)); table.addCell(PdfBaseUtil.createCell(mjyTz.getRemark(), contentFont)); - table.addCell(PdfBaseUtil.createCell(sdf.format(mjyTz.getCreateTime()), contentFont)); + table.addCell(PdfBaseUtil.createCell(PdfExportUtil.parseDateToStr(mjyTz.getCreateTime()), contentFont)); rowNum++; } document.add(table); @@ -159,9 +147,8 @@ public class Drug { * @throws DocumentException */ public void addJcgj(Document document, List mjyJcgjList, String lang) throws IOException, DocumentException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (MjyJcgj jcgj : mjyJcgjList) { - PdfBaseUtil.addUnderlinedTitle(document, sdf.format(jcgj.getCreateTime()) + " " + ("en".equals(lang) ? MjyJcnrUtil.getEn(jcgj.getJcmc()) : jcgj.getJcmc()), 10, false); + PdfBaseUtil.addUnderlinedTitle(document, PdfExportUtil.parseDateToStr(jcgj.getCreateTime())+ " " + getName(jcgj.getJcmc()), 10, false); StringJoiner result = new StringJoiner(", "); if ("en".equals(lang)) { if (StringUtils.isNoneBlank(jcgj.getJcnrEn())) { @@ -189,14 +176,22 @@ public class Drug { } } if (StringUtils.isNoneBlank(jcgj.getRemark())) { - result.add(("en".equals(lang) ? MjyJcnrUtil.getEn("备注") + ":" : "备注:") + jcgj.getRemark()); + result.add(getName("备注")+":" + jcgj.getRemark()); } if (StringUtils.isNoneBlank(jcgj.getRemark())) { - result.add(("en".equals(lang) ? MjyJcnrUtil.getEn("签名人") + ":" : "签名人:") + jcgj.getQmrMc()); + result.add(getName("签名人")+":" + jcgj.getQmrMc()); } PdfBaseUtil.addUnderlinedTitle(document, result.toString(), 10, false); } } + /** + * 获取名称 + * @param name + * @return + */ + public String getName(String name){ + return "en".equals(language) ? MjyJcnrUtil.getEn(name) : name; + } } diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/SP001.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/SP001.java new file mode 100644 index 0000000..1621b94 --- /dev/null +++ b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/SP001.java @@ -0,0 +1,258 @@ +package com.hxhq.business.utils.pdf.template; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hxhq.business.domain.*; +import com.hxhq.business.utils.TemplateUtil; +import com.hxhq.business.utils.pdf.PdfBaseUtil; +import com.hxhq.business.utils.pdf.PdfExportUtil; +import com.hxhq.common.core.utils.StringUtils; +import com.hxhq.common.security.utils.SecurityUtils; +import com.hxhq.system.api.model.LoginUser; +import com.itextpdf.text.*; +import com.itextpdf.text.pdf.BaseFont; +import com.itextpdf.text.pdf.PdfPCell; +import com.itextpdf.text.pdf.PdfPTable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.*; +import java.util.List; + +/** + * 色谱-生物样品分析溶液配制表 + * + * @author tanfei + */ +public class SP001 { + private static final Logger logger = LoggerFactory.getLogger(SP001.class.getName()); + public String language = "zh"; + + /** + * 导出 + * + * @param studyFormFill + * @return + */ + public String exportDetail(StudyFormFill studyFormFill,Template template, List studyFormFillQmxxList, List studyFormFillJcgjList, String lang, String localFilePath) { + language = lang; + Document document = null; + FileOutputStream fos = null; + String filePath = PdfBaseUtil.getFilePath(localFilePath); + try { + String sign = "hxhq"; + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser != null) { + sign = loginUser.getSysUser().getNickName(); + } + document = PdfBaseUtil.init(document, fos, filePath, sign +PdfExportUtil.parseDateToStr(new Date()), "en".equals(language)?template.getShowSn():template.getName()); + // 基本信息 + + JSONObject bdnr = JSONObject.parseObject(studyFormFill.getBdnr()); + PdfBaseUtil.addUnderlinedTitle(document, getName("试验基本信息"), 10, true); + Map formData1 = new LinkedHashMap<>(); + formData1.put(getName("试验名称"), studyFormFill.getStudyMc()); + formData1.put(getName("试验编号"), studyFormFill.getStudySn()); + formData1.put(getName("方法编号"), bdnr.getString("methodCode")); + formData1.put(getName("版本号"), bdnr.getString("methodCode")); + PdfBaseUtil.addFormTableColumns(document, formData1, 2); + + PdfBaseUtil.addUnderlinedTitle(document, getName("试验配置条件"), 10, true); + Map formData2 = new LinkedHashMap<>(); + formData2.put(getName("预填"), bdnr.getString("pre") + (StringUtils.isNoneBlank(bdnr.getString("preOther")) ? bdnr.getString("preOther") : "")); + formData2.put(getName("实际"), bdnr.getString("act") + (StringUtils.isNoneBlank(bdnr.getString("actOther")) ? bdnr.getString("actOther") : "")); + PdfBaseUtil.addFormTableColumns(document, formData2, 2); + + PdfBaseUtil.addUnderlinedTitle(document, getName("配置时间"), 10, true); + Map formData3 = new LinkedHashMap<>(); + formData3.put(getName("开始时间"), studyFormFill.getStartDate() != null ? PdfExportUtil.parseDateToStr(studyFormFill.getStartDate()) : ""); + formData3.put(getName("结束时间"), studyFormFill.getEndDate() != null ? PdfExportUtil.parseDateToStr(studyFormFill.getEndDate()) : ""); + PdfBaseUtil.addFormTableColumns(document, formData3, 2); + + // 签名信息 + PdfBaseUtil.addUnderlinedTitle(document, getName("试验试剂信息"), 10, true); + addResource(document, studyFormFill.getResource()); + + PdfBaseUtil.addUnderlinedTitle(document, getName("仪器使用信息"), 10, true); + PdfBaseUtil.addUnderlinedTitle(document, getName("存储条件"), 10, true); + Map formData4 = new LinkedHashMap<>(); + formData4.put(getName("存储条件"), bdnr.getString("storageCondition") + (StringUtils.isNoneBlank(bdnr.getString("storageConditionOther")) ? bdnr.getString("storageConditionOther") : "")); + PdfBaseUtil.addFormTableColumns(document, formData4, 1); + + PdfBaseUtil.addUnderlinedTitle(document, getName("操作步骤"), 10, true); + Map formData5 = new LinkedHashMap<>(); + formData5.put(getName("目标溶液名称"), bdnr.getString("targetName")); + formData5.put(getName("目标溶液编号"), bdnr.getString("targetCode") + bdnr.getString("targetCodeSn")); + formData5.put(getName("目标溶液预计浓度"), bdnr.getString("targetPreConcentration") + bdnr.getString("targetPreConcentrationUnit")); + formData5.put(getName("目标溶液实际浓度"), bdnr.getString("targetActConcentration") + bdnr.getString("targetPreConcentrationUnit")); + formData5.put(getName("目标溶液预计体积"), bdnr.getString("targetPreVolume") + bdnr.getString("targetPreVolumeUnit")); + formData5.put(getName("目标溶液实际体积"), bdnr.getString("targetActVolume") + bdnr.getString("targetActVolumeUnit")); + formData5.put(getName("有效周期"), bdnr.getString("effectivePeriod") + bdnr.getString("effectivePeriodUnit")); + formData5.put(getName("失效日"), bdnr.getString("sxrq")); + PdfBaseUtil.addFormTableColumns(document, formData5, 2); + PdfBaseUtil.addUnderlinedTitle(document, getName("备注") + ":" +(StringUtils.isNoneBlank(bdnr.getString("remark")) ? bdnr.getString("remark") : ""), 10, false); + + // 签名信息 + PdfBaseUtil.addUnderlinedTitle(document, getName("签名信息"), 10, true); + addQmxx(document, studyFormFillQmxxList); + //稽查轨迹 + PdfBaseUtil.addUnderlinedTitle(document, getName("稽查轨迹"), 10, true); + addJcgj(document, studyFormFillJcgjList); + logger.info("生成成功:{}", filePath); + } catch (Exception e) { + logger.error("生成失败", e); + throw new RuntimeException("生成失败: " + e.getMessage()); + } finally { + if (document != null) { + document.close(); + } + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + logger.error("关闭文件流失败", e); + } + } + } + return filePath; + } + + /** + * 仪器使用信息 + * + * @param document + * @param resource + * @throws IOException + * @throws DocumentException + */ + public void addResource(Document document, String resource) throws IOException, DocumentException { +// [{"mc":"布洛芬","bh":"BLF260115-0014","ph":"","nd":"18ng/mL","source":"ELN配制","ndz":18,"nddw":"ng/mL","kc":1190,"kcdw":"3","syl":"4","syldw":"3","yxzq":360,"yxzqdw":"days"}] + if (StringUtils.isNoneBlank(resource)) { + JSONArray jsonArray = JSONArray.parseArray(resource); + // 9. 表头 + BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + Font headerFont = new Font(bfChinese, 10, Font.NORMAL); + Font contentFont = new Font(bfChinese, 10, Font.NORMAL); + // 8. 创建表格 + PdfPTable table = new PdfPTable(6); + table.setWidthPercentage(100); + String[] headers = {getName("试剂名称"), getName("编号"), getName("批号"), getName("浓度/含量/纯度"), getName("来源"), getName("失效日")}; + for (String header : headers) { + PdfPCell cell = new PdfPCell(new Phrase(header, headerFont)); + cell.setHorizontalAlignment(Element.ALIGN_CENTER); + cell.setPadding(8); + cell.setBorderWidth(1); + table.addCell(cell); + } + int rowNum = 0; + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject obj = jsonArray.getJSONObject(i); + // 交替行颜色 + if (rowNum % 2 == 0) { + table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); + } else { + table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); + } + table.addCell(PdfBaseUtil.createCell(obj.getString("mc"), contentFont)); + table.addCell(PdfBaseUtil.createCell(obj.getString("bh"), contentFont)); + table.addCell(PdfBaseUtil.createCell(obj.getString("ph"), contentFont)); + table.addCell(PdfBaseUtil.createCell(obj.getString("nd"), contentFont)); + table.addCell(PdfBaseUtil.createCell(obj.getString("source"), contentFont)); + table.addCell(PdfBaseUtil.createCell(StringUtils.isNoneBlank(obj.getString("sxrq")) ? obj.getString("sxrq") : "", contentFont)); + rowNum++; + } + document.add(table); + + } + } + + + /** + * 签名信息 + * + * @param document + * @param studyFormFillQmxxList + * @throws IOException + * @throws DocumentException + */ + public void addQmxx(Document document, List studyFormFillQmxxList) throws IOException, DocumentException { + // 9. 表头 + BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + Font headerFont = new Font(bfChinese, 10, Font.NORMAL); + Font contentFont = new Font(bfChinese, 10, Font.NORMAL); + // 8. 创建表格 + PdfPTable table = new PdfPTable(4); + table.setWidthPercentage(100); + String[] headers = {getName("签名人"), getName("签名意义"), getName("签名时间"), getName("备注原因")}; + for (String header : headers) { + PdfPCell cell = new PdfPCell(new Phrase(header, headerFont)); + cell.setHorizontalAlignment(Element.ALIGN_CENTER); + cell.setPadding(8); + cell.setBorderWidth(1); + table.addCell(cell); + } + int rowNum = 0; + for (StudyFormFillQmxx studyFormFillQmxx : studyFormFillQmxxList) { + // 交替行颜色 + if (rowNum % 2 == 0) { + table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); + } else { + table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); + } + table.addCell(PdfBaseUtil.createCell(studyFormFillQmxx.getQmrMc(), contentFont)); + table.addCell(PdfBaseUtil.createCell(studyFormFillQmxx.getQmyy(), contentFont)); + table.addCell(PdfBaseUtil.createCell(PdfExportUtil.parseDateToStr(studyFormFillQmxx.getCreateTime()), contentFont)); + table.addCell(PdfBaseUtil.createCell(studyFormFillQmxx.getRemark(), contentFont)); + rowNum++; + } + document.add(table); + } + + /** + * 稽查轨迹 + * + * @param document + * @param studyFormFillJcgjList + * @throws IOException + * @throws DocumentException + */ + public void addJcgj(Document document, List studyFormFillJcgjList) throws IOException, DocumentException { + for (StudyFormFillJcgj jcgj : studyFormFillJcgjList) { + PdfBaseUtil.addUnderlinedTitle(document, PdfExportUtil.parseDateToStr(jcgj.getCreateTime()) + " " + jcgj.getJcmc(), 10, false); + StringJoiner result = new StringJoiner(", "); + if (StringUtils.isNoneBlank(jcgj.getJcnr())) { + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonArray = mapper.readTree(jcgj.getJcnr()); + for (JsonNode node : jsonArray) { + if (node.get("name") != null) { + String name = node.get("name").asText(); + String value = node.get("value") != null ? node.get("value").asText() : ""; + result.add(name + ":" + value); + } + } + } + if (StringUtils.isNoneBlank(jcgj.getRemark())) { + result.add(getName("备注") + ":" + jcgj.getRemark()); + } + if (StringUtils.isNoneBlank(jcgj.getRemark())) { + result.add(getName("签名人") + ":" + jcgj.getQmrMc()); + } + PdfBaseUtil.addUnderlinedTitle(document, result.toString(), 10, false); + } + } + + /** + * 获取名称 + * + * @param name + * @return + */ + public String getName(String name) { + return "en".equals(language) ? TemplateUtil.getEn(name) : name; + } + +} diff --git a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/sp/Sp001.java b/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/sp/Sp001.java deleted file mode 100644 index 2f9f5de..0000000 --- a/hxhq-modules/hxhq-system/src/main/java/com/hxhq/business/utils/pdf/template/sp/Sp001.java +++ /dev/null @@ -1,248 +0,0 @@ -package com.hxhq.business.utils.pdf.template.sp; - -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.hxhq.business.domain.*; -import com.hxhq.business.dto.mjy.DetailDto; -import com.hxhq.business.utils.pdf.PdfBaseUtil; -import com.hxhq.common.core.utils.StringUtils; -import com.hxhq.common.security.utils.SecurityUtils; -import com.hxhq.system.api.model.LoginUser; -import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; -import com.itextpdf.text.pdf.PdfPCell; -import com.itextpdf.text.pdf.PdfPTable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.List; - -/** - * 色谱001 - * - * @author tanfei - */ -public class Sp001 { - private static final Logger logger = LoggerFactory.getLogger(Sp001.class.getName()); - - /** - * 导出 - * - * @param studyFormFill - * @return - */ - public String exportDetail(StudyFormFill studyFormFill, List studyFormFillQmxxList, List studyFormFillJcgjList, String localFilePath) { - Document document = null; - FileOutputStream fos = null; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String filePath = PdfBaseUtil.getFilePath(localFilePath); - try { - String sign = "华西海圻"; - LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null) { - sign = loginUser.getSysUser().getNickName(); - } - document = PdfBaseUtil.init(document, fos, filePath, sign + sdf.format(new Date()), studyFormFill.getBdmc()); - // 基本信息 - - JSONObject bdnr = JSONObject.parseObject(studyFormFill.getBdnr()); - PdfBaseUtil.addUnderlinedTitle(document, "试验基本信息", 10, true); - Map formData1 = new LinkedHashMap<>(); - formData1.put("试验名称", studyFormFill.getStudyMc()); - formData1.put("试验编号", studyFormFill.getStudySn()); - formData1.put("方法编号", bdnr.getString("methodCode")); - formData1.put("版本号", bdnr.getString("methodCode")); - PdfBaseUtil.addFormTableColumns(document, formData1, 2); - - PdfBaseUtil.addUnderlinedTitle(document, "试验配置条件", 10, true); - Map formData2 = new LinkedHashMap<>(); - formData2.put("预填", bdnr.getString("pre") + (StringUtils.isNoneBlank(bdnr.getString("preOther")) ? bdnr.getString("preOther") : "")); - formData2.put("实际", bdnr.getString("act") + (StringUtils.isNoneBlank(bdnr.getString("actOther")) ? bdnr.getString("actOther") : "")); - PdfBaseUtil.addFormTableColumns(document, formData2, 2); - - PdfBaseUtil.addUnderlinedTitle(document, "配置时间", 10, true); - Map formData3 = new LinkedHashMap<>(); - formData3.put("开始时间", studyFormFill.getStartDate() != null ? sdf.format(studyFormFill.getStartDate()) : ""); - formData3.put("结束时间", studyFormFill.getEndDate() != null ? sdf.format(studyFormFill.getEndDate()) : ""); - PdfBaseUtil.addFormTableColumns(document, formData3, 2); - - // 签名信息 - PdfBaseUtil.addUnderlinedTitle(document, "试验试剂信息", 10, true); - addResource(document, studyFormFill.getResource()); - - PdfBaseUtil.addUnderlinedTitle(document, "仪器使用信息", 10, true); - PdfBaseUtil.addUnderlinedTitle(document, "存储条件", 10, true); - Map formData4 = new LinkedHashMap<>(); - formData4.put("存储条件",bdnr.getString("storageCondition")+ (StringUtils.isNoneBlank(bdnr.getString("storageConditionOther")) ? bdnr.getString("storageConditionOther") : "")); - PdfBaseUtil.addFormTableColumns(document, formData4, 1); - - PdfBaseUtil.addUnderlinedTitle(document, "操作步骤", 10, true); - Map formData5 = new LinkedHashMap<>(); - formData5.put("目标溶液名称", bdnr.getString("targetName")); - formData5.put("目标溶液编号", bdnr.getString("targetCode")+bdnr.getString("targetCodeSn")); - formData5.put("目标溶液预计浓度", bdnr.getString("targetPreConcentration")+bdnr.getString("targetPreConcentrationUnit")); - formData5.put("目标溶液实际浓度", bdnr.getString("targetActConcentration")+bdnr.getString("targetPreConcentrationUnit")); - formData5.put("目标溶液预计体积", bdnr.getString("targetPreVolume")+bdnr.getString("targetPreVolumeUnit")); - formData5.put("目标溶液实际体积", bdnr.getString("targetActVolume")+bdnr.getString("targetActVolumeUnit")); - formData5.put("有效周期", bdnr.getString("effectivePeriod")+bdnr.getString("effectivePeriodUnit")); - formData5.put("失效日", bdnr.getString("sxrq")); - PdfBaseUtil.addFormTableColumns(document, formData5, 2); - PdfBaseUtil.addUnderlinedTitle(document, "备注"+(StringUtils.isNoneBlank(bdnr.getString("remark")) ? ":"+bdnr.getString("remark") : ""), 10, false); - - // 签名信息 - PdfBaseUtil.addUnderlinedTitle(document, "签名信息", 10, true); - addQmxx(document, studyFormFillQmxxList); - //稽查轨迹 - PdfBaseUtil.addUnderlinedTitle(document, "稽查轨迹", 10, true); - addJcgj(document, studyFormFillJcgjList); - logger.info("生成成功:{}", filePath); - } catch (Exception e) { - logger.error("生成失败", e); - throw new RuntimeException("生成失败: " + e.getMessage()); - } finally { - if (document != null) { - document.close(); - } - if (fos != null) { - try { - fos.close(); - } catch (IOException e) { - logger.error("关闭文件流失败", e); - } - } - } - return filePath; - } - - /** - * 仪器使用信息 - * - * @param document - * @param resource - * @throws IOException - * @throws DocumentException - */ - public void addResource(Document document, String resource) throws IOException, DocumentException { -// [{"mc":"布洛芬","bh":"BLF260115-0014","ph":"","nd":"18ng/mL","source":"ELN配制","ndz":18,"nddw":"ng/mL","kc":1190,"kcdw":"3","syl":"4","syldw":"3","yxzq":360,"yxzqdw":"days"}] - if (StringUtils.isNoneBlank(resource)) { - JSONArray jsonArray=JSONArray.parseArray(resource); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // 9. 表头 - BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); - Font headerFont = new Font(bfChinese, 10, Font.NORMAL); - Font contentFont = new Font(bfChinese, 10, Font.NORMAL); - // 8. 创建表格 - PdfPTable table = new PdfPTable(6); - table.setWidthPercentage(100); - String[] headers = {"试剂名称", "编号", "批号", "浓度/含量/纯度","来源","失效日"}; - for (String header : headers) { - PdfPCell cell = new PdfPCell(new Phrase(header, headerFont)); - cell.setHorizontalAlignment(Element.ALIGN_CENTER); - cell.setPadding(8); - cell.setBorderWidth(1); - table.addCell(cell); - } - int rowNum = 0; - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject obj = jsonArray.getJSONObject(i); - // 交替行颜色 - if (rowNum % 2 == 0) { - table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); - } else { - table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); - } - table.addCell(PdfBaseUtil.createCell(obj.getString("mc"), contentFont)); - table.addCell(PdfBaseUtil.createCell(obj.getString("bh"), contentFont)); - table.addCell(PdfBaseUtil.createCell(obj.getString("ph"), contentFont)); - table.addCell(PdfBaseUtil.createCell(obj.getString("nd"), contentFont)); - table.addCell(PdfBaseUtil.createCell(obj.getString("source"), contentFont)); - table.addCell(PdfBaseUtil.createCell(StringUtils.isNoneBlank(obj.getString("sxrq"))?obj.getString("sxrq"):"", contentFont)); - rowNum++; - } - document.add(table); - - } - } - - - /** - * 签名信息 - * - * @param document - * @param studyFormFillQmxxList - * @throws IOException - * @throws DocumentException - */ - public void addQmxx(Document document, List studyFormFillQmxxList) throws IOException, DocumentException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // 9. 表头 - BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); - Font headerFont = new Font(bfChinese, 10, Font.NORMAL); - Font contentFont = new Font(bfChinese, 10, Font.NORMAL); - // 8. 创建表格 - PdfPTable table = new PdfPTable(4); - table.setWidthPercentage(100); - String[] headers = {"签名人", "签名意义", "签名时间", "备注原因"}; - for (String header : headers) { - PdfPCell cell = new PdfPCell(new Phrase(header, headerFont)); - cell.setHorizontalAlignment(Element.ALIGN_CENTER); - cell.setPadding(8); - cell.setBorderWidth(1); - table.addCell(cell); - } - int rowNum = 0; - for (StudyFormFillQmxx studyFormFillQmxx : studyFormFillQmxxList) { - // 交替行颜色 - if (rowNum % 2 == 0) { - table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); - } else { - table.getDefaultCell().setBackgroundColor(BaseColor.WHITE); - } - table.addCell(PdfBaseUtil.createCell(studyFormFillQmxx.getQmrMc(), contentFont)); - table.addCell(PdfBaseUtil.createCell(studyFormFillQmxx.getQmyy(), contentFont)); - table.addCell(PdfBaseUtil.createCell(sdf.format(studyFormFillQmxx.getCreateTime()), contentFont)); - table.addCell(PdfBaseUtil.createCell(studyFormFillQmxx.getRemark(), contentFont)); - rowNum++; - } - document.add(table); - } - - /** - * 稽查轨迹 - * - * @param document - * @param studyFormFillJcgjList - * @throws IOException - * @throws DocumentException - */ - public void addJcgj(Document document, List studyFormFillJcgjList) throws IOException, DocumentException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - for (StudyFormFillJcgj jcgj : studyFormFillJcgjList) { - PdfBaseUtil.addUnderlinedTitle(document, sdf.format(jcgj.getCreateTime()) + " " + jcgj.getJcmc(), 10, false); - StringJoiner result = new StringJoiner(", "); - if (StringUtils.isNoneBlank(jcgj.getJcnr())) { - ObjectMapper mapper = new ObjectMapper(); - JsonNode jsonArray = mapper.readTree(jcgj.getJcnr()); - for (JsonNode node : jsonArray) { - String name = node.get("name").asText(); - String value =node.get("value")!=null? node.get("value").asText():""; - result.add(name + ":" + value); - } - } - if (StringUtils.isNoneBlank(jcgj.getRemark())) { - result.add("备注:" + jcgj.getRemark()); - } - if (StringUtils.isNoneBlank(jcgj.getRemark())) { - result.add("签名人:" + jcgj.getQmrMc()); - } - PdfBaseUtil.addUnderlinedTitle(document, result.toString(), 10, false); - } - } - -}