yangys
2025-09-15 7bc1d0f521c1d59246f29bcadcc4343f88ceef1c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
 
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;
        }
 
    }
 
}