package org.springblade.mdm.flow.service; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.utils.DateUtil; import org.springblade.mdm.basesetting.machine.service.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.commons.support.TemplatedPdfWriter; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.vo.ApproveTableInfo; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.system.feign.IUserClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.*; import com.itextpdf.text.*; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; /** * 审批记录,用于查询执行轨迹 * * @author yangys */ @Slf4j @Service public class ApproveTableService { @Autowired private FlowCommonService flowCommonService; @Autowired private NcNodeService ncNodeService; @Autowired private MachineService machineService; @Autowired private IUserClient useClient; @Autowired private ParamService paramService; @Autowired private OssTemplate ossTemplate; @Autowired private ApproveInfoQueryService approveInfoQueryService; @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; //private static final String UNCHECK_BOX = "☐"; //private static final String CHECKED_BOX = "☑"; //static Chunk square = new Chunk("o", new Font(Font.FontFamily.ZAPFDINGBATS, 12)); // 空方框 //static Chunk check = new Chunk("4", new Font(Font.FontFamily.ZAPFDINGBATS, 12)); // 带勾方框 /* BaseFont getBaseFont() throws DocumentException, IOException { return BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); } Font getChineseFont() throws DocumentException, IOException { BaseFont bfChinese = getBaseFont(); return new Font(bfChinese, 12, Font.NORMAL); }*/ public void exportApproveTable(String processInstanceId, OutputStream os) throws IOException, DocumentException { FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstanceId); TemplatedPdfWriter pdfWriter = new TemplatedPdfWriter(getTemplateBytes()); pdfWriter.write(getPdfData(props),os); } /** * 获取pdf模板的字节数组 * @return 模板字节数组 * @throws IOException */ private byte[] getTemplateBytes() throws IOException { String tplOssName = paramService.approveTableTemplateOssFileName(); try (InputStream inputStream = this.ossTemplate.statFileStream(tplOssName)) { return inputStream.readAllBytes(); } } /** * 获取填充数据 */ Map getPdfData(FlowProgramProperties props){ ApproveTableInfo approveInfo = approveInfoQueryService.getApproveInfo(props); Machine machine; String machineCode = props.getMachineCode(); machine = machineService.getByCode(machineCode); Map pdfData = new HashMap<>(); pdfData.put("drawingNo",props.getDrawingNo()); pdfData.put("processNo",props.getProcessNo()); pdfData.put("craftEdition",props.getCraftEdition()); pdfData.put("machineMode",machine.getName()); String DATE_PATTERN = "yyyy-M-d"; String dispatchDateStr = " "; if (approveInfo.getDispatchDate() != null) { dispatchDateStr = DateUtil.format(approveInfo.getDispatchDate(), DATE_PATTERN); } pdfData.put("teamLeader",approveInfo.getTeamLeaderName()+"/"+dispatchDateStr); if(StringUtils.equals(props.getHasCuredProgram(),FlowContants.Y)){ pdfData.put("fuzeren",approveInfo.getCheckerName()); pdfData.put("checkY","Y");//固化,属于校对任务 }else{ pdfData.put("fuzeren",approveInfo.getProgrammerName());//负责人 pdfData.put("programY","Y");//其他,属于编制任务 } pdfData.put("fangzhenY","Y"); pdfData.put("programNo",approveInfo.getProgramNo()); Date programDate = approveInfo.getCheckDate(); Date checkDate = approveInfo.getCheckDate(); String pDateStr = " "; if (programDate != null) { pDateStr = DateUtil.format(programDate, DATE_PATTERN); } String checkDateStr = " "; if (checkDate != null) { checkDateStr = DateUtil.format(programDate, DATE_PATTERN); } String approveDateStr = " "; if (approveInfo.getApproveDate() != null) { approveDateStr = DateUtil.format(approveInfo.getApproveDate(), DATE_PATTERN); } pdfData.put("programmer",approveInfo.getProgrammerName()+"/"+pDateStr); pdfData.put("checker",approveInfo.getCheckerName()+"/"+checkDateStr); pdfData.put("senior",approveInfo.getSeniorName()+"/"+approveDateStr); pdfData.put("sendDir",machine.getProgSendDir()!=null?machine.getProgSendDir():""); return pdfData; } /* public void exportApproveTableOld(String processInstanceId, OutputStream os) throws DocumentException, IOException { BaseFont bfChinese = getBaseFont(); Document document = new Document(PageSize.B5.rotate()); PdfWriter.getInstance(document, os); document.open(); FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstanceId); ApproveTableInfo appInfo = getApproveInfo(props); Machine machine; String machineCode = props.getMachineCode(); machine = machineService.getByCode(machineCode); int flag = props.getProcessDefinitionKey().equals(FlowContants.TRY_PROCESS_KEY)?1:2; printPage(document, bfChinese, props, machine, flag, appInfo); //document.newPage(); //printPage(document, bfChinese, props, machine, 2, appInfo); document.close(); } */ }