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;
}
}
}