package org.springblade.mdm.flow.service; import com.itextpdf.text.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.api.R; import org.springblade.mdm.basesetting.machine.service.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.basesetting.producedivision.entity.QinzheFgb; import org.springblade.mdm.basesetting.producedivision.service.QinzheFgbService; import org.springblade.mdm.commons.contants.DictBizConstants; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.commons.support.TemplatedPdfWriter; import org.springblade.mdm.flow.vo.ApproveTableInfo; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.system.feign.IDictBizClient; import org.springblade.system.feign.IUserClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.*; import java.util.*; /** * 数控程序确认表输出服务 * * @author yangys */ @Slf4j @Service public class ProgramConfirmTableService { @Autowired private QinzheFgbService qinzheFgbService; @Autowired private IDictBizClient dictBizClient; @Autowired private NcNodeService ncNodeService; @Autowired private MachineService machineService; @Autowired private OssTemplate ossTemplate; @Autowired private IUserClient userClient; @Autowired private ParamService paramService; @Autowired private ApproveInfoQueryService approveInfoQueryService; public void exportConfirmTable(FlowProgramProperties props, OutputStream os) throws IOException, DocumentException { //byte[] tplBytes = getTemplateBytes(); TemplatedPdfWriter pdfWriter = new TemplatedPdfWriter(getTemplateBytes()); //generateTempPDF(tplBytes,props,os); pdfWriter.write(getPdfData(props),os); } /* void generateTempPDF(byte[] bytes,FlowProgramProperties props,OutputStream outputStream) throws DocumentException, IOException { PdfReader reader = null; PdfStamper pdfStamper = null; reader = new PdfReader(bytes); pdfStamper = new PdfStamper(reader, outputStream); // 使用中文字体 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); ArrayList fontList = new ArrayList<>(); fontList.add(bf); AcroFields fields = pdfStamper.getAcroFields(); fields.setSubstitutionFonts(fontList); fillData(fields, getData(props));//染 //必须要调用这个,否则文档不会生成的 pdfStamper.setFormFlattening(true); pdfStamper.close(); } void fillData(AcroFields fields, Map data) throws DocumentException, IOException { for (String key : data.keySet()) { String value = data.get(key); // 为字段赋值,注意字段名称是区分大小写的fields.setField(key,value); fields.setField(key,value,true); //form.setFieldProperty("fieldName", "clrflags", PdfAnnotation.FLAGS_HIDDEN, null); //fields.setFieldRichValue() } }*/ /** * 获取模板字节数组 * @return */ private byte[] getTemplateBytes() throws IOException { String tplOssName = paramService.confirmTableTemplateOssFileName(); try (InputStream inputStream = this.ossTemplate.statFileStream(tplOssName)) { return inputStream.readAllBytes(); } } /** * 获取打印表格的数据 * @param props 流程属性 * @return 数据map */ Map getPdfData(FlowProgramProperties props){ Map data = new HashMap<>(); data.put("pageTotal","1"); data.put("pageNo","1"); data.put("processNo",props.getProcessNo()); data.put("drawingNo",props.getDrawingNo()); data.put("drawingNoEdition",props.getDrawingNoEdition()); data.put("processName",props.getProcessName()); data.put("processEdition",props.getProcessEdition()); data.put("machineCode",props.getMachineCode()); data.put("productModel",props.getProductModel()); data.put("craftEdition",props.getCraftEdition()); //零组件名称 data.put("drawingName",getDrawingName(props.getDrawingNo())); data.put("deviation",props.getDeviation()!=null?props.getDeviation():StringUtils.EMPTY); Machine machine = this.machineService.getByCode(props.getMachineCode()); data.put("machineMode",machine.getName()); R dictSystemResult = dictBizClient.getValue(DictBizConstants.CONTROL_SYSTEM,machine.getControlSystem()); if(dictSystemResult.isSuccess()){ data.put("controlSystem",dictSystemResult.getData()); } data.put("operator","来源MES/2025-1-1"); data.put("jjy","来源MES/2025-1-1"); data.put("fuheY","Y");//TODO 有 检验员 则符合 data.put("keyongY","Y");//TODO 有 检验员 则符合 data.put("jly","来源MES/2025-1-1"); data.put("jln","来源MES/2025-1-1"); ApproveTableInfo approveInfo = approveInfoQueryService.getApproveInfo(props); data.put("programmerName",approveInfo.getProgrammerName()); data.put("checkerName",approveInfo.getCheckerName()); data.put("seniorName",approveInfo.getSeniorName()); data.put("programNo",approveInfo.getProgramName()); return data; } /** * 查询程序编号 * @param nodeId * @return */ /* private String queryProgramNo(Long nodeId) { if(nodeId ==null) { return StringUtils.EMPTY; } NcNode programPkdNode = this.ncNodeService.getById(nodeId); if (programPkdNode != null) { return programPkdNode.getProgramNo(); }else{ return StringUtils.EMPTY; } } */ /** * 获取零组件名称 * @param drawingNo 零件编号 * @return 零组件名称 */ String getDrawingName(String drawingNo){ QinzheFgb fgb = qinzheFgbService.getByLjh(drawingNo); if(fgb!= null){ return fgb.getLjmc(); }else{ return StringUtils.EMPTY; } } }