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
package com.yuanchu.mom.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.deepoove.poi.data.Pictures;
import com.yuanchu.mom.dto.FeIlluminationDto;
import com.yuanchu.mom.dto.FeIlluminationExportDto;
import com.yuanchu.mom.dto.FePowerStableExportDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.FeIlluminationDetectionAreaMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.FeIllumination;
import com.yuanchu.mom.mapper.FeIlluminationMapper;
import com.yuanchu.mom.pojo.FeIlluminationDetectionArea;
import com.yuanchu.mom.pojo.FeMeasuredQuantity;
import com.yuanchu.mom.service.FeIlluminationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
import com.yuanchu.mom.utils.DateImageUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.HashMap;
import java.util.List;
 
/**
 * <p>
 * 设施和环境条件-设施和环境条件要求-照度记录表 服务实现类
 * </p>
 *
 * @author 
 * @since 2024-11-07 04:15:57
 */
@Service
public class FeIlluminationServiceImpl extends ServiceImpl<FeIlluminationMapper, FeIllumination> implements FeIlluminationService {
 
    @Resource
    private FeIlluminationDetectionAreaMapper feIlluminationDetectionAreaMapper;
    @Resource
    private UserMapper userMapper;
 
    @Value("${file.path}")
    private String imgUrl;
 
 
    @Override
    public IPage<FeIlluminationDto> getFeLightningProtection(Page page) {
        return baseMapper.getFeLightningProtection(page);
    }
 
    /**
     * 导出照度记录
     * @param intensityIlluminationId
     * @param response
     */
    @Override
    public void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response) {
        FeIlluminationExportDto illuminationExportDto = baseMapper.selectFeIllumination(intensityIlluminationId);
        // 检测人
        String testerUrl = null;
        if (illuminationExportDto.getTesterId() != null) {
            testerUrl = userMapper.selectById(illuminationExportDto.getTesterId()).getSignatureUrl();
            if (StringUtils.isBlank(testerUrl)) {
                throw new ErrorException("找不到检测人的签名");
            }
        }
 
        // 核查人
        String checkerUrl = null;
        if (illuminationExportDto.getCheckerId() != null) {
            checkerUrl = userMapper.selectById(illuminationExportDto.getCheckerId()).getSignatureUrl();
            if (StringUtils.isBlank(checkerUrl)) {
                throw new ErrorException("找不到核查人的签名");
            }
        }
 
        // 查询详情
        List<FeIlluminationDetectionArea> feIlluminationDetectionAreas = feIlluminationDetectionAreaMapper.selectList(Wrappers.<FeIlluminationDetectionArea>lambdaQuery()
                .eq(FeIlluminationDetectionArea::getIntensityIlluminationId, intensityIlluminationId));
 
        // 获取路径
        InputStream inputStream = this.getClass().getResourceAsStream("/static/illumination.docx");
        Configure configure = Configure.builder()
                .bind("detectionAreaList", new HackLoopTableRenderPolicy())
                .build();
        String finalTesterUrl = testerUrl;
        String finalCheckerUrl = checkerUrl;
 
        // 判断检测日期是否为空
        LocalDateTime localDateTime = null;
        if (illuminationExportDto.getTestDate() != null) {
            Instant instant = illuminationExportDto.getTestDate().toInstant();
            ZoneId zoneId = ZoneId.systemDefault();
            localDateTime = instant.atZone(zoneId).toLocalDateTime();
        }
        LocalDateTime finalLocalDateTime = localDateTime;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("illumination", illuminationExportDto);
                    put("detectionAreaList", feIlluminationDetectionAreas);
                    put("testerUrl", StringUtils.isNotBlank(finalTesterUrl) ? Pictures.ofLocal(imgUrl + "/" + finalTesterUrl).create() : null);
                    put("checkerUrl", StringUtils.isNotBlank(finalCheckerUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCheckerUrl).create() : null);
                    put("testDateUrl", finalLocalDateTime != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(finalLocalDateTime)).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "照明记录导出", "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("导出失败");
        }
    }
}