diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java index 3c4e372..c5e47f6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java @@ -38,12 +38,13 @@ ImageConfig imageConfig = new ImageConfig(); imageConfig.setFiledName(keyParamList.get(i)); imageConfig.setDocName(customizedSignNames.get(i)); + approvalImageList.add(imageConfig); } return approvalImageList; } - protected String getTemplateName(T templateIdOrName) { + protected String getTemplateName(T templateIdOrName) { String fileName = ""; if (templateIdOrName instanceof Long) { fileName = fileRegisterMapper.getSignFileSealById((Long) templateIdOrName, "system_template"); @@ -69,14 +70,29 @@ .keyWord(keyWord) .vertical(-10f) .horizontal(60f) - .stampHeight(40f) - .stampWidth(60f) + .stampHeight(20f) + .stampWidth(50f) .diaphaneity(150f) .build(); return electronicImage; } /** + * 默认电子签章的图片设置,允许重写 + */ + public ElectronicImage defaultElectronicImage(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(10f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + /** * 自动生成是根据宽度设定取空隙平均值 * 默认电子签章的图片设置,允许重写 * word长度大约为400*600 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java index 3c4e372..c5e47f6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java @@ -38,12 +38,13 @@ ImageConfig imageConfig = new ImageConfig(); imageConfig.setFiledName(keyParamList.get(i)); imageConfig.setDocName(customizedSignNames.get(i)); + approvalImageList.add(imageConfig); } return approvalImageList; } - protected String getTemplateName(T templateIdOrName) { + protected String getTemplateName(T templateIdOrName) { String fileName = ""; if (templateIdOrName instanceof Long) { fileName = fileRegisterMapper.getSignFileSealById((Long) templateIdOrName, "system_template"); @@ -69,14 +70,29 @@ .keyWord(keyWord) .vertical(-10f) .horizontal(60f) - .stampHeight(40f) - .stampWidth(60f) + .stampHeight(20f) + .stampWidth(50f) .diaphaneity(150f) .build(); return electronicImage; } /** + * 默认电子签章的图片设置,允许重写 + */ + public ElectronicImage defaultElectronicImage(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(10f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + /** * 自动生成是根据宽度设定取空隙平均值 * 默认电子签章的图片设置,允许重写 * word长度大约为400*600 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 364bd43..f0cde62 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.business.certificate.RegisterCustomParameters; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; import com.casic.missiles.utils.MinioUtil; @@ -31,7 +32,7 @@ */ @Component @Slf4j -public class PrintFileRegister extends PrintFileSupport { +public class PrintFileRegister extends PrintFileSupport implements FilePrintEnum { @Autowired private MinioClient minioClient; @@ -88,8 +89,14 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } } catch (Exception rex) { - log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters.getCustomObject()), rex); } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java index 3c4e372..c5e47f6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java @@ -38,12 +38,13 @@ ImageConfig imageConfig = new ImageConfig(); imageConfig.setFiledName(keyParamList.get(i)); imageConfig.setDocName(customizedSignNames.get(i)); + approvalImageList.add(imageConfig); } return approvalImageList; } - protected String getTemplateName(T templateIdOrName) { + protected String getTemplateName(T templateIdOrName) { String fileName = ""; if (templateIdOrName instanceof Long) { fileName = fileRegisterMapper.getSignFileSealById((Long) templateIdOrName, "system_template"); @@ -69,14 +70,29 @@ .keyWord(keyWord) .vertical(-10f) .horizontal(60f) - .stampHeight(40f) - .stampWidth(60f) + .stampHeight(20f) + .stampWidth(50f) .diaphaneity(150f) .build(); return electronicImage; } /** + * 默认电子签章的图片设置,允许重写 + */ + public ElectronicImage defaultElectronicImage(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(10f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + /** * 自动生成是根据宽度设定取空隙平均值 * 默认电子签章的图片设置,允许重写 * word长度大约为400*600 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 364bd43..f0cde62 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.business.certificate.RegisterCustomParameters; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; import com.casic.missiles.utils.MinioUtil; @@ -31,7 +32,7 @@ */ @Component @Slf4j -public class PrintFileRegister extends PrintFileSupport { +public class PrintFileRegister extends PrintFileSupport implements FilePrintEnum { @Autowired private MinioClient minioClient; @@ -88,8 +89,14 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } } catch (Exception rex) { - log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters.getCustomObject()), rex); } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java index 2aee62e..4487b65 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -59,6 +59,7 @@ response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "*"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java index 3c4e372..c5e47f6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java @@ -38,12 +38,13 @@ ImageConfig imageConfig = new ImageConfig(); imageConfig.setFiledName(keyParamList.get(i)); imageConfig.setDocName(customizedSignNames.get(i)); + approvalImageList.add(imageConfig); } return approvalImageList; } - protected String getTemplateName(T templateIdOrName) { + protected String getTemplateName(T templateIdOrName) { String fileName = ""; if (templateIdOrName instanceof Long) { fileName = fileRegisterMapper.getSignFileSealById((Long) templateIdOrName, "system_template"); @@ -69,14 +70,29 @@ .keyWord(keyWord) .vertical(-10f) .horizontal(60f) - .stampHeight(40f) - .stampWidth(60f) + .stampHeight(20f) + .stampWidth(50f) .diaphaneity(150f) .build(); return electronicImage; } /** + * 默认电子签章的图片设置,允许重写 + */ + public ElectronicImage defaultElectronicImage(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(10f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + /** * 自动生成是根据宽度设定取空隙平均值 * 默认电子签章的图片设置,允许重写 * word长度大约为400*600 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 364bd43..f0cde62 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.business.certificate.RegisterCustomParameters; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; import com.casic.missiles.utils.MinioUtil; @@ -31,7 +32,7 @@ */ @Component @Slf4j -public class PrintFileRegister extends PrintFileSupport { +public class PrintFileRegister extends PrintFileSupport implements FilePrintEnum { @Autowired private MinioClient minioClient; @@ -88,8 +89,14 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } } catch (Exception rex) { - log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters.getCustomObject()), rex); } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java index 2aee62e..4487b65 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -59,6 +59,7 @@ response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "*"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java index b6fbcf9..603200f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java @@ -1,11 +1,13 @@ package com.casic.missiles.service.listeners.register.data; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.certificate.ImageConfig; import com.casic.missiles.dto.business.file.FilePrintRegister; import com.casic.missiles.dto.flowable.ApprovalLogResponse; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.mapper.sys.PrintFileRegisterMapper; import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.flowable.ApprovalOperateService; @@ -21,13 +23,14 @@ import java.io.File; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @author cz * @date 2024-03-18 */ @Slf4j -public class PrintFileApprovalDataSupport extends FileImageTemplateProvider { +public class PrintFileApprovalDataSupport extends FileImageTemplateProvider implements FilePrintEnum { @Autowired protected ApprovalOperateService approvalOperateService; @@ -43,7 +46,8 @@ protected final FilePrintRegister initialization(String templateFileDir, Long id, String fileName) { FilePrintRegister filePrintRegister = new FilePrintRegister(); - filePrintRegister.setTemplateWordType(fileName.endsWith(".doc") ? true : false); + filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") || + fileName.endsWith(".doc") ? true : false); templateFileDir = templateFileDir + id + File.separator; filePrintRegister.setFileName(fileName); filePrintRegister.setTemDir(templateFileDir); @@ -126,6 +130,43 @@ return electronicImageList; } } + + /** + * 在工作流的人名,创建签名,例如发起人 + * + * @param id + * @param filePrintRegister + */ + protected void createImageNoApproval(Long id, String approvalSignIds, FilePrintRegister filePrintRegister) { + List electronicImageSeals = new ArrayList<>(); + //添加二维码,在指定位置,添加公章等信息 + if (!ObjectUtils.isEmpty(id)) { + //写死 + ElectronicImage electronicImage = defaultElectronicImage("检定专用章"); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateElectronicSignSeal(id, + electronicImage, filePrintRegister)); + } + //添加二维码逻辑 + ElectronicImage electronicImage = defaultElectronicImage("二维码"); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateQRCode(electronicImage, filePrintRegister)); + + + //添加电子认定章逻辑 + if (StringUtils.isNotEmpty(approvalSignIds)) { + String[] noKeyWordsSigns = approvalSignIds.split(","); + List electronicImages = autoCreteAbsoluteSignSealByNumber(noKeyWordsSigns.length); + int count = 0; + for (String noKeyWordsSignId : noKeyWordsSigns) { + electronicImageSeals.add(doPopulateElectronicSignSeal(Long.valueOf(noKeyWordsSignId), + electronicImages.get(count++), filePrintRegister)); + } + electronicImageSeals.addAll(electronicImageSeals); + } + filePrintRegister.setElectronicImageList(electronicImageSeals); + } + /** * 根据节点序号,工作流日志,对工作流参数进行存储到内存,作为提前内存的参数 * @@ -173,4 +214,67 @@ return electronicImage; } + /** + * 二维码获取 + * + * @param electronicImage 关键字 + * @return + */ + protected final ElectronicImage doPopulateQRCode(ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { + String qrCodeName = "QrCode.jpg"; + //设置集合 + electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + qrCodeName); + //放入待下载的文件集合 + filePrintRegister.setQrCode(qrCodeName); + return electronicImage; + } + + + /** + * 处理相对位置的印章 + * + * @param signList + * @param filePrintRegister + * @return + */ + private List imageSignSeal(List signList, FilePrintRegister filePrintRegister) { + List electronicImageSeals = new ArrayList<>(); + if (CollectionUtil.isEmpty(signList)) { + return electronicImageSeals; + } + for (Map signMap : signList) { + ElectronicImage electronicImage = defaultElectronicImage((String) signMap.get(KEYWORDS)); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateElectronicSignSeal((Long) signMap.get("signId"), + electronicImage, filePrintRegister)); + } + return electronicImageSeals; + } + + /** + * 处理绝对位置的印章 + * + * @param signJsonList + * @param filePrintRegister + * @return + */ + private List absoluteSignSeal(List signJsonList, FilePrintRegister filePrintRegister) { + List noKeyWordsList = signJsonList.stream() + .filter(e -> StringUtils.isEmpty((String) e.get(KEYWORDS))) + .collect(Collectors.toList()); + List electronicImageSeals = new ArrayList<>(); + if (CollectionUtil.isEmpty(noKeyWordsList)) { + return electronicImageSeals; + } + //划分为绝对位置的印章和相对关键字的印章 + List electronicImages = autoCreteAbsoluteSignSealByNumber(noKeyWordsList.size()); + int count = 0; + for (Map signMap : noKeyWordsList) { + electronicImageSeals.add(doPopulateElectronicSignSeal((Long) signMap.get("signId"), + electronicImages.get(count++), filePrintRegister)); + } + return electronicImageSeals; + } + + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java index 3c4e372..c5e47f6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java @@ -38,12 +38,13 @@ ImageConfig imageConfig = new ImageConfig(); imageConfig.setFiledName(keyParamList.get(i)); imageConfig.setDocName(customizedSignNames.get(i)); + approvalImageList.add(imageConfig); } return approvalImageList; } - protected String getTemplateName(T templateIdOrName) { + protected String getTemplateName(T templateIdOrName) { String fileName = ""; if (templateIdOrName instanceof Long) { fileName = fileRegisterMapper.getSignFileSealById((Long) templateIdOrName, "system_template"); @@ -69,14 +70,29 @@ .keyWord(keyWord) .vertical(-10f) .horizontal(60f) - .stampHeight(40f) - .stampWidth(60f) + .stampHeight(20f) + .stampWidth(50f) .diaphaneity(150f) .build(); return electronicImage; } /** + * 默认电子签章的图片设置,允许重写 + */ + public ElectronicImage defaultElectronicImage(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(10f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + /** * 自动生成是根据宽度设定取空隙平均值 * 默认电子签章的图片设置,允许重写 * word长度大约为400*600 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 364bd43..f0cde62 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.business.certificate.RegisterCustomParameters; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; import com.casic.missiles.utils.MinioUtil; @@ -31,7 +32,7 @@ */ @Component @Slf4j -public class PrintFileRegister extends PrintFileSupport { +public class PrintFileRegister extends PrintFileSupport implements FilePrintEnum { @Autowired private MinioClient minioClient; @@ -88,8 +89,14 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } } catch (Exception rex) { - log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters.getCustomObject()), rex); } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java index 2aee62e..4487b65 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -59,6 +59,7 @@ response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "*"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java index b6fbcf9..603200f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java @@ -1,11 +1,13 @@ package com.casic.missiles.service.listeners.register.data; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.certificate.ImageConfig; import com.casic.missiles.dto.business.file.FilePrintRegister; import com.casic.missiles.dto.flowable.ApprovalLogResponse; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.mapper.sys.PrintFileRegisterMapper; import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.flowable.ApprovalOperateService; @@ -21,13 +23,14 @@ import java.io.File; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @author cz * @date 2024-03-18 */ @Slf4j -public class PrintFileApprovalDataSupport extends FileImageTemplateProvider { +public class PrintFileApprovalDataSupport extends FileImageTemplateProvider implements FilePrintEnum { @Autowired protected ApprovalOperateService approvalOperateService; @@ -43,7 +46,8 @@ protected final FilePrintRegister initialization(String templateFileDir, Long id, String fileName) { FilePrintRegister filePrintRegister = new FilePrintRegister(); - filePrintRegister.setTemplateWordType(fileName.endsWith(".doc") ? true : false); + filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") || + fileName.endsWith(".doc") ? true : false); templateFileDir = templateFileDir + id + File.separator; filePrintRegister.setFileName(fileName); filePrintRegister.setTemDir(templateFileDir); @@ -126,6 +130,43 @@ return electronicImageList; } } + + /** + * 在工作流的人名,创建签名,例如发起人 + * + * @param id + * @param filePrintRegister + */ + protected void createImageNoApproval(Long id, String approvalSignIds, FilePrintRegister filePrintRegister) { + List electronicImageSeals = new ArrayList<>(); + //添加二维码,在指定位置,添加公章等信息 + if (!ObjectUtils.isEmpty(id)) { + //写死 + ElectronicImage electronicImage = defaultElectronicImage("检定专用章"); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateElectronicSignSeal(id, + electronicImage, filePrintRegister)); + } + //添加二维码逻辑 + ElectronicImage electronicImage = defaultElectronicImage("二维码"); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateQRCode(electronicImage, filePrintRegister)); + + + //添加电子认定章逻辑 + if (StringUtils.isNotEmpty(approvalSignIds)) { + String[] noKeyWordsSigns = approvalSignIds.split(","); + List electronicImages = autoCreteAbsoluteSignSealByNumber(noKeyWordsSigns.length); + int count = 0; + for (String noKeyWordsSignId : noKeyWordsSigns) { + electronicImageSeals.add(doPopulateElectronicSignSeal(Long.valueOf(noKeyWordsSignId), + electronicImages.get(count++), filePrintRegister)); + } + electronicImageSeals.addAll(electronicImageSeals); + } + filePrintRegister.setElectronicImageList(electronicImageSeals); + } + /** * 根据节点序号,工作流日志,对工作流参数进行存储到内存,作为提前内存的参数 * @@ -173,4 +214,67 @@ return electronicImage; } + /** + * 二维码获取 + * + * @param electronicImage 关键字 + * @return + */ + protected final ElectronicImage doPopulateQRCode(ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { + String qrCodeName = "QrCode.jpg"; + //设置集合 + electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + qrCodeName); + //放入待下载的文件集合 + filePrintRegister.setQrCode(qrCodeName); + return electronicImage; + } + + + /** + * 处理相对位置的印章 + * + * @param signList + * @param filePrintRegister + * @return + */ + private List imageSignSeal(List signList, FilePrintRegister filePrintRegister) { + List electronicImageSeals = new ArrayList<>(); + if (CollectionUtil.isEmpty(signList)) { + return electronicImageSeals; + } + for (Map signMap : signList) { + ElectronicImage electronicImage = defaultElectronicImage((String) signMap.get(KEYWORDS)); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateElectronicSignSeal((Long) signMap.get("signId"), + electronicImage, filePrintRegister)); + } + return electronicImageSeals; + } + + /** + * 处理绝对位置的印章 + * + * @param signJsonList + * @param filePrintRegister + * @return + */ + private List absoluteSignSeal(List signJsonList, FilePrintRegister filePrintRegister) { + List noKeyWordsList = signJsonList.stream() + .filter(e -> StringUtils.isEmpty((String) e.get(KEYWORDS))) + .collect(Collectors.toList()); + List electronicImageSeals = new ArrayList<>(); + if (CollectionUtil.isEmpty(noKeyWordsList)) { + return electronicImageSeals; + } + //划分为绝对位置的印章和相对关键字的印章 + List electronicImages = autoCreteAbsoluteSignSealByNumber(noKeyWordsList.size()); + int count = 0; + for (Map signMap : noKeyWordsList) { + electronicImageSeals.add(doPopulateElectronicSignSeal((Long) signMap.get("signId"), + electronicImages.get(count++), filePrintRegister)); + } + return electronicImageSeals; + } + + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java index 491d298..c02d124 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java @@ -43,7 +43,9 @@ protected final FilePrintRegister initialization(String templateFileDir, Long id, String fileName) { FilePrintRegister filePrintRegister = new FilePrintRegister(); - filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") ? true : false); + filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") || + fileName.endsWith(".doc") + ? true : false); templateFileDir = templateFileDir + id + File.separator; filePrintRegister.setFileName(fileName); filePrintRegister.setTemDir(templateFileDir); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java new file mode 100644 index 0000000..ddb96ab --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintEnum.java @@ -0,0 +1,51 @@ +package com.casic.missiles.enums.business; + +/** + * @author cz + */ +public interface FilePrintEnum { + + /** + * 当前表关系字段 + */ + String CURRENT_ID_FIELD = "currentIdField"; + + String RELATE_TABLE_NAME = "relateTableName"; + + String RELATE_ID_FIELD = "relateIdField"; + + /** + * 用于图片字典和名字 + */ + String FILED_NAME = "filedName"; + + /** + * 签名图片的id + */ + String SIGN_ID="signId"; + + /** + * 签名图片的id + */ + String KEYWORDS="keywords"; + /** + * 文档标注的值 + */ + String DOC_NAME = "docName"; + + + /** + * 工作流标志 + */ + String APPROVAL_FLAG = "approvalFlag"; + + /** + * 字典code + */ + String CODE = "code"; + + + String WORD_SUFFIX="docx"; + String PDF_SUFFIX="pdf"; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java index bd1c6b8..f2b2383 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/file/FilePrintRegister.java @@ -51,6 +51,8 @@ private List beDownloadedFileNames; + private String QrCode; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java index 3c4e372..c5e47f6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FileImageTemplateProvider.java @@ -38,12 +38,13 @@ ImageConfig imageConfig = new ImageConfig(); imageConfig.setFiledName(keyParamList.get(i)); imageConfig.setDocName(customizedSignNames.get(i)); + approvalImageList.add(imageConfig); } return approvalImageList; } - protected String getTemplateName(T templateIdOrName) { + protected String getTemplateName(T templateIdOrName) { String fileName = ""; if (templateIdOrName instanceof Long) { fileName = fileRegisterMapper.getSignFileSealById((Long) templateIdOrName, "system_template"); @@ -69,14 +70,29 @@ .keyWord(keyWord) .vertical(-10f) .horizontal(60f) - .stampHeight(40f) - .stampWidth(60f) + .stampHeight(20f) + .stampWidth(50f) .diaphaneity(150f) .build(); return electronicImage; } /** + * 默认电子签章的图片设置,允许重写 + */ + public ElectronicImage defaultElectronicImage(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(10f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + /** * 自动生成是根据宽度设定取空隙平均值 * 默认电子签章的图片设置,允许重写 * word长度大约为400*600 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 364bd43..f0cde62 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON; import com.casic.missiles.dto.business.certificate.RegisterCustomParameters; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.enums.notifyevent.AwareFilePrintTypeEnum; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; import com.casic.missiles.utils.MinioUtil; @@ -31,7 +32,7 @@ */ @Component @Slf4j -public class PrintFileRegister extends PrintFileSupport { +public class PrintFileRegister extends PrintFileSupport implements FilePrintEnum { @Autowired private MinioClient minioClient; @@ -88,8 +89,14 @@ } else { printDocUrl = populateExcelPrintFile(tempLocalFileDir, filePrintRegister, registerParameters.getCustomFileName()); } + if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { + //默认转为docx,只需要进行docx的替换即可 + String pdfNewUrl = printDocUrl.replaceAll(WORD_SUFFIX, PDF_SUFFIX); + FilePrintRegisterUtils.wordToPdf(printDocUrl, pdfNewUrl); + printDocUrl = pdfNewUrl; + } } catch (Exception rex) { - log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters), rex); + log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(registerParameters.getCustomObject()), rex); } finally { if (printDocUrl != null) { //如果文件路径不为空,回传文件流 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java index 2aee62e..4487b65 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -59,6 +59,7 @@ response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "*"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setContentType("application/octet-stream;charset=UTF-8"); IOUtils.copy(fis, response.getOutputStream()); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java index b6fbcf9..603200f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileApprovalDataSupport.java @@ -1,11 +1,13 @@ package com.casic.missiles.service.listeners.register.data; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.certificate.ImageConfig; import com.casic.missiles.dto.business.file.FilePrintRegister; import com.casic.missiles.dto.flowable.ApprovalLogResponse; +import com.casic.missiles.enums.business.FilePrintEnum; import com.casic.missiles.mapper.sys.PrintFileRegisterMapper; import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.flowable.ApprovalOperateService; @@ -21,13 +23,14 @@ import java.io.File; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @author cz * @date 2024-03-18 */ @Slf4j -public class PrintFileApprovalDataSupport extends FileImageTemplateProvider { +public class PrintFileApprovalDataSupport extends FileImageTemplateProvider implements FilePrintEnum { @Autowired protected ApprovalOperateService approvalOperateService; @@ -43,7 +46,8 @@ protected final FilePrintRegister initialization(String templateFileDir, Long id, String fileName) { FilePrintRegister filePrintRegister = new FilePrintRegister(); - filePrintRegister.setTemplateWordType(fileName.endsWith(".doc") ? true : false); + filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") || + fileName.endsWith(".doc") ? true : false); templateFileDir = templateFileDir + id + File.separator; filePrintRegister.setFileName(fileName); filePrintRegister.setTemDir(templateFileDir); @@ -126,6 +130,43 @@ return electronicImageList; } } + + /** + * 在工作流的人名,创建签名,例如发起人 + * + * @param id + * @param filePrintRegister + */ + protected void createImageNoApproval(Long id, String approvalSignIds, FilePrintRegister filePrintRegister) { + List electronicImageSeals = new ArrayList<>(); + //添加二维码,在指定位置,添加公章等信息 + if (!ObjectUtils.isEmpty(id)) { + //写死 + ElectronicImage electronicImage = defaultElectronicImage("检定专用章"); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateElectronicSignSeal(id, + electronicImage, filePrintRegister)); + } + //添加二维码逻辑 + ElectronicImage electronicImage = defaultElectronicImage("二维码"); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateQRCode(electronicImage, filePrintRegister)); + + + //添加电子认定章逻辑 + if (StringUtils.isNotEmpty(approvalSignIds)) { + String[] noKeyWordsSigns = approvalSignIds.split(","); + List electronicImages = autoCreteAbsoluteSignSealByNumber(noKeyWordsSigns.length); + int count = 0; + for (String noKeyWordsSignId : noKeyWordsSigns) { + electronicImageSeals.add(doPopulateElectronicSignSeal(Long.valueOf(noKeyWordsSignId), + electronicImages.get(count++), filePrintRegister)); + } + electronicImageSeals.addAll(electronicImageSeals); + } + filePrintRegister.setElectronicImageList(electronicImageSeals); + } + /** * 根据节点序号,工作流日志,对工作流参数进行存储到内存,作为提前内存的参数 * @@ -173,4 +214,67 @@ return electronicImage; } + /** + * 二维码获取 + * + * @param electronicImage 关键字 + * @return + */ + protected final ElectronicImage doPopulateQRCode(ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { + String qrCodeName = "QrCode.jpg"; + //设置集合 + electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + qrCodeName); + //放入待下载的文件集合 + filePrintRegister.setQrCode(qrCodeName); + return electronicImage; + } + + + /** + * 处理相对位置的印章 + * + * @param signList + * @param filePrintRegister + * @return + */ + private List imageSignSeal(List signList, FilePrintRegister filePrintRegister) { + List electronicImageSeals = new ArrayList<>(); + if (CollectionUtil.isEmpty(signList)) { + return electronicImageSeals; + } + for (Map signMap : signList) { + ElectronicImage electronicImage = defaultElectronicImage((String) signMap.get(KEYWORDS)); + electronicImage.setIsSealImage(true); + electronicImageSeals.add(doPopulateElectronicSignSeal((Long) signMap.get("signId"), + electronicImage, filePrintRegister)); + } + return electronicImageSeals; + } + + /** + * 处理绝对位置的印章 + * + * @param signJsonList + * @param filePrintRegister + * @return + */ + private List absoluteSignSeal(List signJsonList, FilePrintRegister filePrintRegister) { + List noKeyWordsList = signJsonList.stream() + .filter(e -> StringUtils.isEmpty((String) e.get(KEYWORDS))) + .collect(Collectors.toList()); + List electronicImageSeals = new ArrayList<>(); + if (CollectionUtil.isEmpty(noKeyWordsList)) { + return electronicImageSeals; + } + //划分为绝对位置的印章和相对关键字的印章 + List electronicImages = autoCreteAbsoluteSignSealByNumber(noKeyWordsList.size()); + int count = 0; + for (Map signMap : noKeyWordsList) { + electronicImageSeals.add(doPopulateElectronicSignSeal((Long) signMap.get("signId"), + electronicImages.get(count++), filePrintRegister)); + } + return electronicImageSeals; + } + + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java index 491d298..c02d124 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/PrintFileDataSupport.java @@ -43,7 +43,9 @@ protected final FilePrintRegister initialization(String templateFileDir, Long id, String fileName) { FilePrintRegister filePrintRegister = new FilePrintRegister(); - filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") ? true : false); + filePrintRegister.setTemplateWordType(fileName.endsWith(".docx") || + fileName.endsWith(".doc") + ? true : false); templateFileDir = templateFileDir + id + File.separator; filePrintRegister.setFileName(fileName); filePrintRegister.setTemDir(templateFileDir); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java index b2cbda8..b465431 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java @@ -11,12 +11,12 @@ import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.service.listeners.register.data.PrintFileApprovalDataSupport; import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; -import com.casic.missiles.service.listeners.register.data.PrintFileDataSupport; import com.casic.missiles.utils.SnowflakeUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -39,7 +39,7 @@ @Override public FilePrintRegister CustomizedPrintFileRegister(RegisterCustomParameters registerParameters, String templateFileDir) { BusinessCertificateReport metaData = (BusinessCertificateReport) registerParameters.getCustomObject(); - if(StringUtils.isEmpty(metaData.getCertificateReportFile())){ + if (StringUtils.isEmpty(metaData.getCertificateReportFile())) { throw new RuntimeException("the certificateReportFile is Empty,Please upload the certificate ..."); } if (ObjectUtils.isEmpty(metaData.getId())) { @@ -52,12 +52,14 @@ //定制化签名开发预处理,定制化参数 List approvalImageList = customizedSignNamesParamCreator(); //初始化,生成模板文件 - FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(),metaData.getCertificateReportFile()); + FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), metaData.getCertificateReportFile()); + filePrintRegister.setParams(new HashMap()); //定制化签名开发 - List electronicSignList = this.createSignNames(ApprovalLogMap, filePrintRegister,approvalImageList); + List electronicSignList = this.createSignNames(ApprovalLogMap, filePrintRegister, approvalImageList); filePrintRegister.setElectronicImageList(electronicSignList); + //新增编制的 + createImageNoApproval(metaData.getSignId(),metaData.getApprovalSignIds(), filePrintRegister); return filePrintRegister; } - }