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
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
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
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.config.ConfigureBuilder;
import com.deepoove.poi.data.Pictures;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.dto.InternalCorrectDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.InternalCorrectFileMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.InternalCorrect;
import com.yuanchu.mom.mapper.InternalCorrectMapper;
import com.yuanchu.mom.pojo.InternalCorrectFile;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.InternalCorrectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.QueryWrappers;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
 
/**
 * <p>
 * 内审管理纠正处理表 服务实现类
 * </p>
 *
 * @author
 * @since 2024-11-13 04:00:15
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class InternalCorrectServiceImpl extends ServiceImpl<InternalCorrectMapper, InternalCorrect> implements InternalCorrectService {
 
    @Resource
    private InternalCorrectFileMapper internalCorrectFileMapper;
    @Resource
    private GetLook getLook;
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
 
    @Value("${wordUrl}")
    private String wordUrl;
 
 
    @Override
    public boolean addInternalCorrect(InternalCorrect detailsCorrect) {
        InternalCorrect correct = new InternalCorrect();
        // 当前登录用户信息和部门
        User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId"));
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
 
        switch (detailsCorrect.getFlowType()) {
            // 不合格提出
            case 0:
                correct.setRaiseResult(detailsCorrect.getRaiseResult());//不合格表述
                correct.setVdeRaiseResult(detailsCorrect.getVdeRaiseResult());//vde专家发现
                correct.setRaiseDepartment(departmentLimsName);//提出部门
                correct.setRaiseUserId(user.getId());//提出人id
                correct.setRaiseUserName(user.getName());// 提出人
                correct.setRaiseTime(LocalDate.now());// 提出时间
 
                // 原因分析人信息
                User causeUser = userMapper.selectById(detailsCorrect.getCauseUserId());
                String causeDepartmentLims = userMapper.selectUserDepartmentLimsName(causeUser.getId());
 
                correct.setCauseDepartment(causeDepartmentLims);//原因分析责任部门
                correct.setCauseUserId(causeUser.getId());//1原因分析人id
                correct.setCauseUserName(causeUser.getName());// 1原因分析人
                baseMapper.insert(correct);
                break;
 
            // 原因分析
            case 1:
                correct.setCorrectId(detailsCorrect.getCorrectId());
                correct.setCauseResult(detailsCorrect.getCauseResult());//原因分析
                correct.setCauseTime(LocalDate.now());// 1原因分析时间
 
                // 纠正人信息
                User correctUser = userMapper.selectById(detailsCorrect.getCorrectUserId());
                String correctUserDepartmentLims = userMapper.selectUserDepartmentLimsName(correctUser.getId());
 
                correct.setCorrectDepartment(correctUserDepartmentLims);//2纠正责任部门
                correct.setCorrectUserId(correctUser.getId());//2纠正人id
                correct.setCorrectUserName(correctUser.getName());// 2纠正人
                baseMapper.updateById(correct);
                break;
 
            // 纠正措施
            case 2:
                correct.setCorrectId(detailsCorrect.getCorrectId());
                correct.setCorrectResult(detailsCorrect.getCorrectResult());//2纠正措施
                correct.setRaiseDepartmentAffirm(detailsCorrect.getRaiseDepartmentAffirm());//2提出部门确认
                correct.setCorrectTime(LocalDate.now());// 2纠正时间
 
                // 验证人信息
                User validationUser = userMapper.selectById(detailsCorrect.getValidationUserId());
                String validationUserDepartmentLims = userMapper.selectUserDepartmentLimsName(validationUser.getId());
 
                correct.setValidationDepartment(validationUserDepartmentLims);//3验证部门
                correct.setValidationUserId(validationUser.getId());//3验证人id
                correct.setValidationUserName(validationUser.getName());// 3验证人
                baseMapper.updateById(correct);
                break;
 
            // 验证结果
            case 3:
                correct.setCorrectId(detailsCorrect.getCorrectId());
                correct.setValidationResult(detailsCorrect.getValidationResult());//3验证结果
                correct.setValidationTime(LocalDate.now());// 3验证时间
                correct.setIsFinish(1);
                baseMapper.updateById(correct);
                break;
        }
 
        return true;
    }
 
    /**
     * 查询内审管理纠正处理
     * @param correctId
     * @return
     */
    @Override
    public InternalCorrect getInternalCorrect(Integer correctId) {
        InternalCorrect detailsCorrect;
 
        detailsCorrect = baseMapper.selectOne(Wrappers.<InternalCorrect>lambdaQuery()
                .eq(InternalCorrect::getCorrectId, correctId));
 
        if (detailsCorrect == null) {
            detailsCorrect = new InternalCorrect();
        }
        return detailsCorrect;
    }
 
    /**
     * 查询内审管理纠正措施列表
     * @param page
     * @param detailsCorrect
     * @return
     */
    @Override
    public IPage<InternalCorrect> pageInternalCorrect(Page page, InternalCorrect detailsCorrect) {
        return baseMapper.pageInternalAccording(page, QueryWrappers.queryWrappers(detailsCorrect));
    }
 
    /**
     * 新增内审管理纠正措施附件
     * @param InternalCorrectId
     * @param file
     * @return
     */
    @Override
    public boolean uploadInternalCorrectFile(Integer InternalCorrectId, MultipartFile file) {
        if (InternalCorrectId == null) {
            throw new ErrorException("缺少纠正措施id");
        }
 
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        InternalCorrectFile InternalCorrectFile = new InternalCorrectFile();
        InternalCorrectFile.setCorrectId(InternalCorrectId);
        InternalCorrectFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // 是图片
            path = imgUrl;
            InternalCorrectFile.setType(1);
        } else {
            // 是文件
            path = wordUrl;
            InternalCorrectFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            InternalCorrectFile.setFileUrl(pathName);
            internalCorrectFileMapper.insert(InternalCorrectFile);
            return true;
        } catch (Exception e) {
            throw new ErrorException(e.getMessage());
        }
    }
 
    /**
     * 查询内审管理纠正措施附件
     * @param correctId
     * @return
     */
    @Override
    public List<InternalCorrectFile> getInternalCorrectFileList(Integer correctId) {
        return internalCorrectFileMapper.selectList(Wrappers.<InternalCorrectFile>lambdaQuery()
                .eq(InternalCorrectFile::getCorrectId, correctId));
    }
 
    /**
     * 导出纠正措施
     * @param correctId
     * @param response
     */
    @Override
    public void exportInternalCorrect(Integer correctId, HttpServletResponse response) {
        InternalCorrect internalCorrect = baseMapper.selectById(correctId);
        InternalCorrectDto internalCorrectDto = new InternalCorrectDto();
        BeanUtils.copyProperties(internalCorrect, internalCorrectDto);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // 提出时间
        internalCorrectDto.setRaiseTimeString(internalCorrect.getRaiseTime() != null
                ? internalCorrect.getRaiseTime().format(formatter) : null);
        // 原因分析时间
        internalCorrectDto.setCauseTimeString(internalCorrect.getCauseTime() != null
                ? internalCorrect.getCauseTime().format(formatter) : null);
 
        // 纠正时间
        internalCorrectDto.setCorrectTimeString(internalCorrect.getCorrectTime() != null
                ? internalCorrect.getCorrectTime().format(formatter) : null);
 
        // 验证时间
        internalCorrectDto.setValidationTimeString(internalCorrect.getValidationTime() != null
                ? internalCorrect.getValidationTime().format(formatter) : null);
 
 
        // 提出人签名
        String raiseUrl = null;
        if (internalCorrect.getRaiseUserId() != null) {
            raiseUrl = userMapper.selectById(internalCorrect.getRaiseUserId()).getSignatureUrl();
            if (StringUtils.isBlank(raiseUrl)) {
                throw new ErrorException("找不到提出人的签名");
            }
        }
 
        // 原因分析人
        String causeUrl = null;
        if (internalCorrect.getCauseUserId() != null) {
            causeUrl = userMapper.selectById(internalCorrect.getCauseUserId()).getSignatureUrl();
            if (StringUtils.isBlank(causeUrl)) {
                throw new ErrorException("找不到原因分析人的签名");
            }
        }
 
        // 纠正人
        String correctUrl = null;
        if (internalCorrect.getCorrectUserId() != null) {
            correctUrl = userMapper.selectById(internalCorrect.getCorrectUserId()).getSignatureUrl();
            if (StringUtils.isBlank(correctUrl)) {
                throw new ErrorException("找不到纠正人的签名");
            }
        }
 
        // 验证人
        String validationUrl = null;
        if (internalCorrect.getValidationUserId() != null) {
            validationUrl = userMapper.selectById(internalCorrect.getValidationUserId()).getSignatureUrl();
            if (StringUtils.isBlank(validationUrl)) {
                throw new ErrorException("找不到验证人的签名");
            }
        }
 
        // 获取路径
        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-correct.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalRaiseUrl = raiseUrl;
        String finalCauseUrl = causeUrl;
        String finalCorrectUrl = correctUrl;
        String finalValidationUrl = validationUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("correct", internalCorrectDto);
                    put("raiseUrl", StringUtils.isNotBlank(finalRaiseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRaiseUrl).create() : null);
                    put("causeUrl", StringUtils.isNotBlank(finalCauseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCauseUrl).create() : null);
                    put("correctUrl", StringUtils.isNotBlank(finalCorrectUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectUrl).create() : null);
                    put("validationUrl", StringUtils.isNotBlank(finalValidationUrl) ? Pictures.ofLocal(imgUrl + "/" + finalValidationUrl).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("导出失败");
        }
 
    }
}