diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml index 2df5f93..ddc9269 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BusinessCertificatePrintMapper.xml @@ -30,7 +30,7 @@ bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i bcp.id, certificate_report_code, certificate_report_name, original_record_id, original_record_name, certificate_report_category, certificate_report_type,measure_content,measure_type, sample_id, sample_name, order_id, customer_no, customer_name, customer_phone, customer_email, customer_address, deliverer_id, deliverer, deliverer_tel, plan_deliver_time, require_over_time, approval_status, print_num, print_status, measure_dept_id, measure_person_id,certificate_report_file, remark, create_user, create_time, is_del - ,sign_id,template_id + ,sign_id,template_id,process_id @@ -39,7 +39,7 @@ csi.sample_name AS "sampleName",csi.sample_model AS "sampleModel",csi.manufacturing_no AS "manufacturingNo",bo.order_code AS "orderNo", csi.measure_type AS "measureType",bcp.certificate_report_type AS "certificateType",bcp.print_status AS - "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName", + "printStatus",bcp.print_num AS "printNum",bcp.print_file_name AS "printFileName",process_id AS "processId", bcp.approval_status AS "approvalStatus",bcp.create_time AS "createTime",bcp.measure_person_id AS "measurePersonId" FROM ( SELECT * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java index f043071..1d9bef9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificateListResponse.java @@ -95,6 +95,9 @@ @ApiModelProperty(value = "任务id", dataType = "String") private String taskId; + @ApiModelProperty(value = "流程实例id", dataType = "String") + private String processId; + @ApiModelProperty(value = "审批状态", dataType = "Integer") private Integer decisionItem; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java index f7cda52..5314f98 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/print/CertificatePrintDetail.java @@ -52,6 +52,7 @@ @TableField("template_id") private Long templateId; + @ApiModelProperty("校检类别") @TableField(exist = false) private String measureType; @@ -73,6 +74,12 @@ private String sampleName; /** + * 流程实例id + */ + @ApiModelProperty("流程实例id") + private String processId; + + /** * 委托书id */ @TableField("order_id") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java index 052513d..9247487 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificatePrint.java @@ -77,6 +77,13 @@ private String approvalStatus; /** + * 流程实例id + */ + @TableField("process_id") + private String processId; + + + /** * 证书报告id */ @TableField("template_id") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 1ef7e71..6b21f4e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -134,16 +135,18 @@ runtimeService.updateBusinessStatus(request.getProcessId(), ApprovalStatusEnum.DELETED); runtimeService.deleteProcessInstance(request.getProcessId(), "删除"); } - String formId = request.getFormId(); ReturnDTO returnDTO = baseApprovalService.processSubmit(formId, request.getId()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(returnDTO.getCode())) { return returnDTO; } + ProcessInstance processInstance = (ProcessInstance) returnDTO.getData(); BusinessCertificatePrint certificatePrint = BusinessCertificatePrint.builder() .id(request.getId()) + .processId(processInstance.getId()) .approvalStatus(ApprovalStatusEnum.IN_APPROVED) .printStatus(IN_APPROVAL) + .build(); int row = this.baseMapper.updateById(certificatePrint); if (row <= 0) { @@ -183,6 +186,7 @@ approvalList.getRecords().forEach(approval -> { toBeApprovedList.forEach(toBeApprovedDTO -> { if (String.valueOf(approval.getId()).equals(toBeApprovedDTO.getBusinessKey())) { + approval.setTaskId(toBeApprovedDTO.getTaskId()); } }); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java index c4c826e..fcc793d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/CertificateReportEventPostProcessor.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.dto.flowable.NotifyEventStatusDTO; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.notifyevent.ActionStatusBeanEnum; @@ -14,7 +15,11 @@ import com.casic.missiles.model.business.BusinessCertificatePrint; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.customer.CustomerSampleInfo; +import com.casic.missiles.service.listeners.processor.register.PrintFileRegister; +import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.SpringContextUtil; +import com.google.gson.JsonObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -26,6 +31,7 @@ * * 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i
* 证书报告审批通过状态回填 */ +@Slf4j @Service(ActionStatusBeanEnum.CERTIFICATE_REPORT_BEAN_NAME) public class CertificateReportEventPostProcessor implements NotifyEventPostProcessor { @@ -60,12 +66,18 @@ if (row < 1 || rs < 1) throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } + //获取证书报告信息 certificateReport = certificateReportMapper.selectById(id); //进行证书报告生成,并在远程注册服务器注册 -// PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); -// String printFileName = printFileRegister.registerPrintFile(certificateReport); + PrintFileRegister printFileRegister = SpringContextUtil.getBean(PrintFileRegister.class); String printFileName = ""; + try { + DictCodeUtils.convertDictCodeToName(certificateReport); + printFileName = printFileRegister.registerPrintFile(certificateReport, certificateReport.getCertificateReportTypeName()); + } catch (Exception ex) { + log.error("打印异常,证书报告信息为{},异常信息为{}", JSONObject.toJSON(certificateReport), ex); + } //生成证书打印信息 CertificatePrintBuilder(certificateReport, printFileName); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java index 6077b9d..0fde2e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FilePrintRegisterUtils.java @@ -271,7 +271,7 @@ // 设置电子章大小 docPicture.setWidth(absolutePathImage.getStampWidth()); - docPicture.setHeight(absolutePathImage.getHorizontal()); + docPicture.setHeight(absolutePathImage.getStampHeight()); // 设置图片位于文字顶层 docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text); @@ -444,9 +444,9 @@ // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试.docx"; + String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试.docx"; + String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; //WORD转PDF存放位置 String pdfNewUrl = localPathUrl + "\\tem.pdf"; //电子印章图片地址 @@ -463,21 +463,29 @@ electronicSealList.add(electronicImage); addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); // 将新word转化为pdf文件 - electronicSealList = new ArrayList(11); - electronicImage=defaultElectronicSignSeal("发证单位"); + electronicImage=defaultElectronicSignSeal("",0); electronicImage.setElectronicSealImageUrl(stampSealImgUrl); electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); + addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); + +// electronicImage=defaultElectronicSignSeal("",120f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); +// electronicImage=defaultElectronicSignSeal("",240f); +// electronicImage.setElectronicSealImageUrl(stampSealImgUrl); +// electronicSealList.add(electronicImage); +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, electronicImage); // 将新word转化为pdf文件 addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } - protected static ElectronicImage defaultElectronicSignSeal(String keyWord) { + protected static ElectronicImage defaultElectronicSignSeal(String keyWord,float horizontal) { ElectronicImage electronicImage = ElectronicImage.builder() .keyWordIndex(-1) .keyWord(keyWord) - .vertical(-10f) - .horizontal(80f) + .vertical(-50f) + .horizontal(450f) .stampHeight(100f) .stampWidth(100f) .diaphaneity(150f) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java new file mode 100644 index 0000000..a48376b --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/FileTemplateProvider.java @@ -0,0 +1,108 @@ +package com.casic.missiles.service.listeners.processor.register; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import io.lettuce.core.Consumer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileTemplateProvider { + + + /** + * 电子签名获取的流程 keyParamList,customizedSignNames具有映射功能 + */ + protected List keyParamList; + /** + * 自定义签名名字 + */ + protected List customizedSignNames; + + /** + * 文件自定义名称参数构建器 + */ + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); + customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); + } + + protected FileTemplateProvider() { + this.keyParamList = new ArrayList<>(); + customizedSignNames = new ArrayList<>(); + } + /** + * 默认电子签名的图片设置,支持重写 + */ + protected ElectronicImage defaultElectronicSignName(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(60f) + .stampHeight(40f) + .stampWidth(60f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 默认电子签章的图片设置,允许重写 + */ + protected ElectronicImage defaultElectronicSignSeal(String keyWord) { + ElectronicImage electronicImage = ElectronicImage.builder() + .keyWordIndex(-1) + .keyWord(keyWord) + .vertical(-10f) + .horizontal(80f) + .stampHeight(100f) + .stampWidth(100f) + .diaphaneity(150f) + .build(); + return electronicImage; + } + + /** + * 自动生成是根据宽度设定取空隙平均值 + * 默认电子签章的图片设置,允许重写 + * word长度大约为400*600 + * 其中定位点图片中心位置 + * + */ + protected List autoCreteAbsoluteSignSealByNumber(Integer sealsNumber) { + List electronicImageList=new ArrayList<>(); + ElectronicImage templateElectronic=defaultAbsoluteElectronicSignSeal(""); + Float intervalWith=templateElectronic.getStampWidth()*sealsNumber>=400? + 0:(400+(templateElectronic.getStampWidth()/2)-templateElectronic.getStampWidth()*sealsNumber)/(sealsNumber+1); + ElectronicImage electronicImage=null; + Float tempIntervalWith=intervalWith; + for(int i=0;i keyParamList; - /** - * 自定义签名名字 - */ - protected List customizedSignNames; - - protected PrintFileDataSupport() { - this.keyParamList = new ArrayList<>(); - customizedSignNames = new ArrayList<>(); - } - @Resource protected PrintFileRegisterMapper fileRegisterMapper; @@ -63,16 +51,9 @@ filePrintRegister.setBeDownloadedFileNames(fileNames); } - /** - * 文件自定义名称参数构建器 - */ - protected void customizedSignNamesParamCreator() { - keyParamList = Arrays.asList("发起人", "审批中", "审批完成"); - customizedSignNames = Arrays.asList("发起人", "核验人", "批准人"); - } /** - * 电子签名构建器 + * 电子签名创建器 */ protected List customizedSignNamesCreator(Map> approvalLogMap, FilePrintRegister filePrintRegister) { List electronicImageList = new ArrayList<>(); @@ -85,14 +66,12 @@ if (CollectionUtils.isNotEmpty(approvalLogList)) { approvalLogList.forEach( approvalLog -> { - ElectronicImage electronicImage = defaultElectronicSignName(); + ElectronicImage electronicImage = defaultElectronicSignName(customizedSignName); String signFileName = fileRegisterMapper.getSignFileNameById(approvalLog.getAssigneeId()); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + signFileName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(signFileName); - //设置关键字 - electronicImage.setKeyWord(customizedSignName); electronicImageList.add(electronicImage); } ); @@ -102,52 +81,26 @@ } /** - * 默认电子签名的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignName() { - ElectronicImage electronicImage = ElectronicImage.builder() - .vertical(0f) - .horizontal(20f) - .stampHeight(20f) - .stampWidth(40f) - .build(); - return electronicImage; - } - - /** - * 默认电子签章的图片设置,允许重写 - */ - protected ElectronicImage defaultElectronicSignSeal() { - ElectronicImage electronicImage = ElectronicImage.builder() - .keyWordIndex(-1) - .vertical(-55f) - .horizontal(300f) - .stampHeight(120f) - .stampWidth(120f) - .diaphaneity(150f) - .build(); - return electronicImage; - } - - /** * 电子签章获取 * * @param electronicSealId 证书报告文件数据 - * @param keyWord 关键字 + * @param electronicImage 关键字 * @return */ - protected ElectronicImage doCreateElectronicSignSeal(Long electronicSealId, String keyWord, FilePrintRegister filePrintRegister) { - ElectronicImage electronicImage = defaultElectronicSignSeal(); + protected ElectronicImage doPopulateElectronicSignSeal(Long electronicSealId, ElectronicImage electronicImage, FilePrintRegister filePrintRegister) { String electronicSealName = fileRegisterMapper.getSignFileSealById(electronicSealId, "system_sign"); //设置集合 electronicImage.setElectronicSealImageUrl(filePrintRegister.getTemDir() + electronicSealName); //放入待下载的文件集合 filePrintRegister.getBeDownloadedFileNames().add(electronicSealName); - //设置关键字 - electronicImage.setKeyWord(keyWord); return electronicImage; } + /** + * 参数在模板中起替换作用 + * @param metaData + * @return + */ protected Map certificateFilePopulateParamCreator(BusinessCertificateReport metaData) { Calendar now = Calendar.getInstance(); BusinessOrder businessOrder = businessOrderService.orderDetail(metaData.getOrderId()); @@ -165,5 +118,4 @@ return params; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java index 22074aa..ca4b65d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/PrintFileRegister.java @@ -67,14 +67,17 @@ downTemplateFile(fileName, tempLocalFileDir); } //合并注册 - String certificatePdfName = FilePrintRegisterUtils.filePrintGenerate(metaData); + String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 -// uploadCertificate(certificatePdfName); + uploadCertificate(certificatePdfUrl); + File certificatePdfFile = new File(certificatePdfUrl); + String certificatePdfName=certificatePdfFile.getName(); //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); + return certificatePdfName; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java index 283473d..e257958 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/processor/register/data/certificate/CalibrationPrintFileData.java @@ -58,11 +58,13 @@ */ private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister ) { + /** + * 定制化电子签章文件 + * + * @param metaData + * @return + */ + private List customizedElectronicSignSeals(BusinessCertificateReport metaData, FilePrintRegister filePrintRegister) { List electronicImageSeals = new ArrayList<>(); - electronicImageSeals.add(doCreateElectronicSignSeal(metaData.getSignId(), "发证单位",filePrintRegister)); + ElectronicImage electronicImage = defaultElectronicSignSeal("发证单位"); + electronicImageSeals.add(doPopulateElectronicSignSeal(metaData.getSignId(), electronicImage,filePrintRegister)); if (StringUtils.isNotEmpty(metaData.getApprovalSignId())) { String[] approvalSignIds = metaData.getApprovalSignId().split(","); - for (String approvalSignId : approvalSignIds) { - electronicImageSeals.add(doCreateElectronicSignSeal(Long.valueOf(approvalSignId), "",filePrintRegister)); + List electronicImages= autoCreteAbsoluteSignSealByNumber(approvalSignIds.length); + for (int i=0;i