郑永安
2023-09-19 69185134fcfaf913ea45f1255677225a2cc311a4
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
package com.gk.hotwork.specialWork.service.impl;
 
import com.gk.hotwork.Domain.Enum.ResultCodes;
import com.gk.hotwork.Domain.Exception.BusinessException;
import com.gk.hotwork.Domain.Exception.E;
import com.gk.hotwork.Domain.Utils.StringUtils;
import com.gk.hotwork.Domain.Vo.ResultVO;
import com.gk.hotwork.Domain.dto.DepInfoRPCRespDTO;
import com.gk.hotwork.Service.Middle.AccountDepartmentService;
import com.gk.hotwork.specialWork.entity.*;
import com.gk.hotwork.specialWork.enums.*;
import com.gk.hotwork.specialWork.service.WorkBlindPlatePluggingPrintService;
import com.gk.hotwork.specialWork.service.WorkBrokenCircuitPrintService;
import com.gk.hotwork.specialWork.service.baseService.*;
import com.gk.hotwork.specialWork.util.WorkPrintShiftUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
 
@Service("WorkBlindPlatePluggingPrintService")
public class WorkBlindPlatePluggingPrintServiceImpl implements WorkBlindPlatePluggingPrintService {
    @Autowired
    private WorkApprovalUnitInfoService workApprovalUnitInfoService;
    @Autowired
    private WorkApprovalStepInfoService workApprovalStepInfoService;
    @Autowired
    private WorkApprovalFilledItemInfoService workApprovalFilledItemInfoService;
    @Autowired
    private WorkApprovalItemInfoService workApprovalItemInfoService;
    @Autowired
    private WorkApprovalItemMeasureInfoService workApprovalItemMeasureInfoService;
    @Autowired
    private WorkBlindPlatePluggingInfoService workBlindPlatePluggingInfoService;
    @Autowired
    private WorkApplyOperatorInfoService workApplyOperatorInfoService;
 
 
    public Map<String,Object> workBlindPlatePluggingPrint(HttpServletResponse response, WorkApplyInfo workApplyInfo){
 
        //获取层级
        List<WorkApprovalStepInfo> workApprovalStepInfoList = workApprovalStepInfoService.listApprovalRuleStepByWorkApplyId(workApplyInfo.getId());
        //审批单元
        List<WorkApprovalUnitInfo> workApprovalUnitInfoList = workApprovalUnitInfoService.listApprovalRuleUnitByWorkApplyId(workApplyInfo.getId());
        //获取审批项
        List<WorkApprovalItemInfo> workApprovalItemInfoList = workApprovalItemInfoService.listWorkApprovalItemByWorkApplyId(workApplyInfo.getId());
        //获取审批项填报
        List<WorkApprovalFilledItemInfo> workApprovalFilledItemInfoList = workApprovalFilledItemInfoService.listApprovalFilledItemInfoByWorkApplyId(workApplyInfo.getId());
        //获取安全措施项
        List<WorkApprovalItemMeasureInfo> workApprovalItemMeasureInfoList = workApprovalItemMeasureInfoService.listWorkApprovalItemMeasureByWorkApplyId(workApplyInfo.getId());
        //盲板作业
        WorkBlindPlatePluggingInfo workBlindPlatePluggingInfo = workBlindPlatePluggingInfoService.getById(workApplyInfo.getWorkDetailId());
        //获取作业人
//        List<WorkApplyOperatorInfo> workApplyOperatorInfoList = workApplyOperatorInfoService.listWorkOperatorByWorkApplyId(workApplyInfo.getId());
 
        //基础数据
        Map<String,String> baseDataMap=new HashMap<>();
        baseDataMap.put("applydepName",workApplyInfo.getDepName());
        baseDataMap.put("applyUname",workApplyInfo.getApplyUname());
        baseDataMap.put("workCode",workApplyInfo.getWorkPermitNo());
        baseDataMap.put("mainMedia",workBlindPlatePluggingInfo.getMainMedia());
        baseDataMap.put("temperature",String.valueOf(workBlindPlatePluggingInfo.getTemperature() == null ? 0.0 : workBlindPlatePluggingInfo.getTemperature())+"℃");
        baseDataMap.put("pressure",String.valueOf(workBlindPlatePluggingInfo.getPressure() == null ? 0.0 : workBlindPlatePluggingInfo.getPressure())+"kPa");
        baseDataMap.put("bpMq",workBlindPlatePluggingInfo.getBpMaterialQuality());
        baseDataMap.put("bpSp",workBlindPlatePluggingInfo.getBpSpecification());
        baseDataMap.put("bpCode",workBlindPlatePluggingInfo.getBpCode());
        baseDataMap.put("workTime","自"+ WorkPrintShiftUtil.shiftTime(workApplyInfo.getExpStartTime())+"至"+WorkPrintShiftUtil.shiftTime(workApplyInfo.getExpEndTime())+"止");
        baseDataMap.put("operatorNames",workApplyInfo.getOperatorUnames());
 
        //分析数据
        List<Map<String,String>> anList = new ArrayList<>();
        //获取分析人层级数据
        List<WorkApprovalStepInfo> analystStepList = workApprovalStepInfoList
                .stream()
                .filter(step -> step.getType().equals(ApprovalStepTypeEnum.TYPE_ANALYST.getType()))
                .collect(Collectors.toList());
        if(analystStepList.size()>0){
            //获取参与审核分析人
            List<WorkApprovalUnitInfo> analysUnitList = workApprovalUnitInfoList
                    .stream()
                    .filter(unit -> unit.getStepId().equals(analystStepList.get(0).getId()) && unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_SUCCESS.getResult()))
                    .collect(Collectors.toList());
            WorkApprovalUnitInfo unitInfo = new WorkApprovalUnitInfo();
            if(analysUnitList.size()>0){
                unitInfo = analysUnitList.get(0);
            }
            //获取审批项
            List<WorkApprovalItemInfo> analystItemList = workApprovalItemInfoList
                    .stream()
                    .filter(item -> item.getStepId().equals(analystStepList.get(0).getId()))
                    .collect(Collectors.toList());
 
            //填入数据
            for (WorkApprovalItemInfo itemInfo : analystItemList) {
                //获取审批项填入对应数据
                List<WorkApprovalFilledItemInfo> fillList = workApprovalFilledItemInfoList
                        .stream()
                        .filter(fillItem -> fillItem.getItemId().equals(itemInfo.getId()))
                        .collect(Collectors.toList());
                WorkApprovalFilledItemInfo workApprovalFilledItemInfo = new WorkApprovalFilledItemInfo();
                if(fillList.size()>0){
                    workApprovalFilledItemInfo = fillList.get(0);
                }
                Map<String,String> map = new HashMap<>();
                map.put("anaAddress", workApprovalFilledItemInfo.getAnalysisLocation());
                map.put("anaItemName", itemInfo.getItemName());
                map.put("anaData", workApprovalFilledItemInfo.getVal().toString()+"%");
                map.put("anaResult", WorkApprovalUnitResultEnum.parse(unitInfo.getResult()).getDesc());
                map.put("anaUname", unitInfo.getApprovalUname());
                map.put("anaTime", WorkPrintShiftUtil.shiftTime(unitInfo.getApprovalActualTime()));
                anList.add(map);
 
            }
        }
        //安全措施数据
        List<Map<String, String>> meList = new ArrayList<>();
        //遍历层级 获取安全措施层级
        for (WorkApprovalStepInfo stepInfo : workApprovalStepInfoList) {
            if(!ApprovalStepTypeEnum.TYPE_ANALYST.getType().equals(stepInfo.getType())){//非分析人审批人
                //过滤审批项
                List<WorkApprovalItemInfo> itemList = workApprovalItemInfoList
                        .stream()
                        .filter(item -> item.getStepId().equals(stepInfo.getId()))
                        .collect(Collectors.toList());
                if(itemList.size()>0 ){
                    if(null != itemList.get(0).getMeasureId()){//措施id不为空则为安全措施项
                        //定义序号变量
                        int index = 1;
 
                        //获取该层审批人
                        List<WorkApprovalUnitInfo>  itemUnitList = workApprovalUnitInfoList
                                .stream()
                                .filter(unit -> unit.getStepId().equals(stepInfo.getId()) && unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_SUCCESS.getResult()))
                                .collect(Collectors.toList());
 
                        //选择类型使用
                        //审批人审批结果
                       /* String approvalResult = "";
                        //生成审批人字符串
                        StringBuffer stringBuffer = new StringBuffer();
                        for (WorkApprovalUnitInfo unitInfo : itemUnitList) {
                            stringBuffer.append(unitInfo.getApprovalUname()).append(",");
                            if(StringUtils.isBlank(approvalResult)){
                                //赋值
                                approvalResult = WorkApprovalUnitResultEnum.parse(unitInfo.getResult()).getDesc();
                            }
                        }
                        stringBuffer.deleteCharAt(stringBuffer.toString().length()-1);*/
 
                        //遍历审批项
                        for (WorkApprovalItemInfo itemInfo : itemList) {
 
                            //获取该审批对应措施
                            List<WorkApprovalItemMeasureInfo> measureList = workApprovalItemMeasureInfoList
                                    .stream()
                                    .filter(measure -> measure.getId().equals(itemInfo.getMeasureId()))
                                    .collect(Collectors.toList());
                            WorkApprovalItemMeasureInfo workApprovalItemMeasureInfo = new WorkApprovalItemMeasureInfo();
                            if(measureList.size()>0){
                                workApprovalItemMeasureInfo = measureList.get(0);
                            }
                            //获取该审批项对应的审批数据
                            List<WorkApprovalFilledItemInfo> fillItemList = workApprovalFilledItemInfoList
                                    .stream()
                                    .filter(fillItem -> fillItem.getItemId().equals(itemInfo.getId()))
                                    .collect(Collectors.toList());
                            //遍历审批人
                            for(WorkApprovalUnitInfo unitInfo: itemUnitList) {
                                String measureContext = workApprovalItemMeasureInfo.getContext();
                                //获取审批人填写的审批数据
                                List<WorkApprovalFilledItemInfo> unitFillItemList = fillItemList
                                        .stream()
                                        .filter(fillItem -> fillItem.getUnitId().equals(unitInfo.getId()))
                                        .collect(Collectors.toList());
                                WorkApprovalFilledItemInfo workApprovalFilledItemInfo = new WorkApprovalFilledItemInfo();
                                if (unitFillItemList.size() > 0) {
                                    workApprovalFilledItemInfo = unitFillItemList.get(0);
                                }
                                //判断
                                if(RuleItemTypeEnum.parse(itemInfo.getType()).equals(RuleItemTypeEnum.FILL)){//填空
 
                                    if(measureContext.indexOf("_")>0){//存在,替换
                                        measureContext = measureContext.replace("_",workApprovalFilledItemInfo.getMeasureText());
                                    }else {//不存在,加载后面
                                        measureContext = measureContext + workApprovalFilledItemInfo.getMeasureText();
                                    }
                                    Map<String,String> map = new HashMap<>();
                                    map.put("index", String.valueOf(index));
                                    map.put("measure", measureContext);
                                    map.put("mResult", WorkApprovalUnitResultEnum.parse(unitInfo.getResult()).getDesc());
                                    map.put("mUname", unitInfo.getApprovalUname());
                                    meList.add(map);
                                    index++;
 
                                }else{//选项
                                    Map<String,String> map = new HashMap<>();
                                    map.put("index", String.valueOf(index));
                                    map.put("measure", workApprovalItemMeasureInfo.getContext());
                                    map.put("mUname", unitInfo.getApprovalUname());
                                    if(workApprovalFilledItemInfo.getMeasureVal().equals(WorkRuleMeasureOptEnum.UNINVOLVED.getType())){
                                        map.put("mResult", WorkRuleMeasureOptEnum.parse(workApprovalFilledItemInfo.getMeasureVal()).getDesc());
                                    }else{
                                        map.put("mResult", WorkApprovalUnitResultEnum.parse(unitInfo.getResult()).getDesc());
                                    }
                                    meList.add(map);
                                    index++;
                                }
 
                            }
                        }
 
                    }
                }
            }
        }
 
        //审批层数据
        List<Map<String, String>> apList = new ArrayList<>();
        //排序
        workApprovalStepInfoList.sort(Comparator.comparing(WorkApprovalStepInfo::getStepSerial));
        //遍历层级
        for (WorkApprovalStepInfo stepInfo: workApprovalStepInfoList) {
            if(!ApprovalStepTypeEnum.TYPE_ANALYST.getType().equals(stepInfo.getType())){//非分析人审批人
                //获取该层审批项
                List<WorkApprovalItemInfo> itemList = workApprovalItemInfoList
                        .stream()
                        .filter(item -> item.getStepId().equals(stepInfo.getId()))
                        .collect(Collectors.toList());
                //获取审批人
                List<WorkApprovalUnitInfo> approvalUnitList = workApprovalUnitInfoList
                        .stream()
                        .filter(unit -> unit.getStepId().equals(stepInfo.getId()) && unit.getResult().equals(WorkApprovalUnitResultEnum.RESULT_SUCCESS.getResult()))
                        .collect(Collectors.toList());
 
                if(itemList.size() == 0){//无审批项
                    //遍历审批人
                    for (WorkApprovalUnitInfo unitInfo : approvalUnitList) {
 
                        Map<String,String> map = new HashMap<>();
                        map.put("apprStepName", stepInfo.getStepName());
                        map.put("apprOpinion", unitInfo.getFillContent());
                        map.put("apprUname", unitInfo.getApprovalUname());
                        map.put("apResult", WorkApprovalStepResultEnum.parse(stepInfo.getApprovalResult()).getDesc());
                        map.put("apprSign", unitInfo.getApprovalUname());
                        map.put("apprTime",WorkPrintShiftUtil.shiftTime(unitInfo.getApprovalActualTime()));
                        apList.add(map);
 
                    }
                }
            }
        }
        // 模板文件输入输出地址
        String filePath = "/docxTemplate/workBlindPlatePlugging.docx";
        if(StringUtils.isBlank(filePath)){
            throw new BusinessException(E.EXPORT_FAIL,"模板不存在!");
        }
        //综合数据
        Map<String,Object> dataMap = new HashMap<>();
        dataMap.put("baseData",baseDataMap);
        dataMap.put("approval",apList);
        dataMap.put("measure",meList);
        dataMap.put("analysis",anList);
        dataMap.put("text",workApplyInfo.getWorkPermitNo());
        dataMap.put("filePath",filePath);
        dataMap.put("fileName",WorkTypeEnum.parse(workApplyInfo.getWorkType()).getName());
        dataMap.put("workCode",workApplyInfo.getWorkPermitNo());
 
        // 模板文件输入输出地址
//            String outPath = "F:/test/workBlindPlugging示例文档.docx";
//            WorkExportUtil workExportUtil = new WorkExportUtil();
//            workExportUtil.setTempLocalPath(filePath);    //设置模板的路径
//            workExportUtil.init();            //初始化工具类
//            workExportUtil.export(dataMap);   //写入相关数据
//            workExportUtil.generate(outPath);   //导出到目标文档
 
        return dataMap;
    }
}