|
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<BaseFont> 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<String, String> 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<String,String> getPdfData(FlowProgramProperties props){
|
Map<String,String> 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<String> 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;
|
}
|
|
}
|
|
}
|