zss
6 天以前 51ec98113c6d49d0f7eec4e3c030e55e337e97db
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
package com.yuanchu.mom.service.impl;
 
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.InspectionOrderExportDto;
import com.yuanchu.mom.dto.ProcessOrderDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.InsOrderMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.mapper.ProcessOrderMapper;
import com.yuanchu.mom.pojo.InspectionOrderDetail;
import com.yuanchu.mom.service.ProcessOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
import com.yuanchu.mom.utils.XWPFDocumentUtils;
import com.yuanchu.mom.utils.QueryWrappers;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * <p>
 * 要求、标书和合同评审 服务实现类
 * </p>
 *
 * @author
 * @since 2024-11-05 03:06:20
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessOrderServiceImpl extends ServiceImpl<ProcessOrderMapper, ProcessOrder> implements ProcessOrderService {
 
    @Resource
    private ProcessOrderMapper processOrderMapper;
 
    @Resource
    InsOrderMapper insOrderMapper;
 
    @Resource
    private UserMapper userMapper;
 
    @Override
    public Map<String, Object> pageProcessOrder(Page page, ProcessOrderDto processOrderDto) {
        Map<String, Object> map = new HashMap<>();
        map.put("head", PrintChina.printChina(ProcessOrderDto.class));
        map.put("body", processOrderMapper.pageProcessOrder(page, QueryWrappers.queryWrappers(processOrderDto)));
        return map;
    }
 
    @Override
    public ProcessOrderDto getProcessOrder(Integer id) {
        return processOrderMapper.getProcessOrder(id);
    }
 
    @Override
    public int doProcessOrder(ProcessOrder processOrder) {
        if (ObjectUtils.isNotEmpty(processOrder.getComprehensiveUser())) {
            User user = userMapper.selectById(processOrder.getComprehensiveUser());
            if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到综合室签名人的电子签名,请上传电子签名!");
        }
        if (ObjectUtils.isNotEmpty(processOrder.getIssueUser())) {
            User user = userMapper.selectById(processOrder.getIssueUser());
            if (ObjectUtils.isEmpty(user.getSignatureUrl())) throw new ErrorException("未找到领样员的电子签名,请上传电子签名!");
        }
        return processOrderMapper.updateById(processOrder);
    }
 
 
    @Override
    public void exportInspectionOrder(Integer id, HttpServletResponse response) {
        ProcessOrder processOrder = baseMapper.selectById(id);
        InspectionOrderExportDto inspectionOrderExportDto = extracted(processOrder);
        List<InspectionOrderDetail> list = baseMapper.selectInsOrder(processOrder.getInsOrderId());
        int index = 1;
        for (InspectionOrderDetail inspectionOrderDetail : list) {
            inspectionOrderDetail.setIndex(index);
            index++;
        }
 
        // 获取路径
        InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx");
        Configure configure = Configure.builder()
                .bind("inspectionOrderDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("inspectionOrder", inspectionOrderExportDto);
                    put("inspectionOrderDetailList", list);
                }});
 
        // 处理换行问题
        XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument());
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    inspectionOrderExportDto.getSample(), "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
 
    private InspectionOrderExportDto extracted(ProcessOrder processOrder) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto();
        ProcessOrderDto processOrderDto = getProcessOrder(processOrder.getId());
        BeanUtils.copyProperties(processOrderDto, inspectionOrderExportDto);
        if (processOrderDto.getCreateTime() != null) {
            inspectionOrderExportDto.setCommissionDateString(processOrderDto.getCreateTime().format(formatter));
        }
        if (processOrder.getComprehensiveTime() != null) {
            inspectionOrderExportDto.setReceiptDataString(processOrder.getComprehensiveTime().format(formatter));
        }
        if (processOrder.getIssueTime() != null) {
            inspectionOrderExportDto.setSampleDataString(processOrder.getIssueTime().format(formatter));
        }
        if (processOrderDto.getAppointed() != null) {
            inspectionOrderExportDto.setAppointedString(processOrderDto.getAppointed().format(formatter));
        }
 
        inspectionOrderExportDto.setIsLeave1(processOrderDto.getIsLeave() != null && processOrderDto.getIsLeave() == 1 ? "☑" : "□");
        inspectionOrderExportDto.setIsLeave2(processOrderDto.getIsLeave() != null && processOrderDto.getIsLeave() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setSend0(processOrderDto.getSend() != null && processOrderDto.getSend() == 1 ? "☑" : "□");
        inspectionOrderExportDto.setSend1(processOrderDto.getSend() != null && processOrderDto.getSend() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setProcessing0(processOrderDto.getProcessing() != null && processOrderDto.getProcessing() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setProcessing1(processOrderDto.getProcessing() != null && processOrderDto.getProcessing() == 1 ? "☑" : "□");
        if (ObjectUtils.isNotEmpty(processOrder.getRule())) {
            inspectionOrderExportDto.setCriterionRule0(processOrder.getRule().equals("不考虑不确定度") ? "☑" : "□");
            inspectionOrderExportDto.setCriterionRule1(processOrder.getRule().contains("-") ? "☑" : "□");
            inspectionOrderExportDto.setCriterionRuleRemark(processOrder.getRule().contains("-") ? processOrder.getRule().split("-")[1] : "");
        }
        return inspectionOrderExportDto;
    }
}