package com.yuanchu.mom.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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.dto.PersonSupervisionControlSheetExportDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.pojo.PersonSupervisionControlSheet; import com.yuanchu.mom.mapper.PersonSupervisionControlSheetMapper; import com.yuanchu.mom.service.PersonSupervisionControlSheetService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.util.HashMap; import java.util.List; /** *

* 监督记录 - 控制单 服务实现类 *

* * @author * @since 2024-10-10 05:18:57 */ @Service public class PersonSupervisionControlSheetServiceImpl extends ServiceImpl implements PersonSupervisionControlSheetService { @Resource private UserMapper userMapper; @Value("${file.path}") private String imgUrl; /** * 导出人员监督记录纠正控制单 * @param supervisionRecordId * @param response */ @Override public void exportSupervisionControlSheet(Integer supervisionRecordId, HttpServletResponse response) { PersonSupervisionControlSheetExportDto controlSheetExportDto = baseMapper.selectSupervisionControl(supervisionRecordId); // 判断不符合工作发现途径是否为空 if (StringUtils.isNotBlank(controlSheetExportDto.getDiscoveryApproach())) { List splitList = StrUtil.split(controlSheetExportDto.getDiscoveryApproach(), ','); for (String s : splitList) { switch (s) { case "0": controlSheetExportDto.setDiscoveryApproach0("☑"); break; case "1": controlSheetExportDto.setDiscoveryApproach1("☑"); break; case "2": controlSheetExportDto.setDiscoveryApproach2("☑"); break; case "3": controlSheetExportDto.setDiscoveryApproach3("☑"); break; case "4": controlSheetExportDto.setDiscoveryApproach4("☑"); break; case "5": controlSheetExportDto.setDiscoveryApproach5("☑"); break; case "6": controlSheetExportDto.setDiscoveryApproach6("☑"); break; case "7": controlSheetExportDto.setDiscoveryApproach7("☑"); break; } } } // 发现部门 String discovererUrl = null; if (controlSheetExportDto.getDepartmentHeadId() != null) { discovererUrl = userMapper.selectById(controlSheetExportDto.getDepartmentHeadId()).getSignatureUrl(); if (StringUtils.isBlank(discovererUrl)) { throw new ErrorException("找不到发现部门人的签名"); } } // 处理措施负责人 String responsibleUrl = null; if (controlSheetExportDto.getResponsibleDepartmentPersonId() != null) { responsibleUrl = userMapper.selectById(controlSheetExportDto.getResponsibleDepartmentPersonId()).getSignatureUrl(); if (StringUtils.isBlank(responsibleUrl)) { throw new ErrorException("找不到处理措施负责人的签名"); } } // 技术负责人 String correctiveUrl = null; if (controlSheetExportDto.getResponsibleDepartmentPersonId() != null) { correctiveUrl = userMapper.selectById(controlSheetExportDto.getResponsibleDepartmentPersonId()).getSignatureUrl(); if (StringUtils.isBlank(correctiveUrl)) { throw new ErrorException("找不到技术负责人的签名"); } } // 质量负责人 String qualityUrl = null; if (controlSheetExportDto.getQualitySupervisorId() != null) { qualityUrl = userMapper.selectById(controlSheetExportDto.getQualitySupervisorId()).getSignatureUrl(); if (StringUtils.isBlank(qualityUrl)) { throw new ErrorException("找不到质量负责人的签名"); } } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-control-sheet.docx"); ConfigureBuilder builder = Configure.builder(); builder.useSpringEL(true); String finalDiscovererUrl = discovererUrl; String finalResponsibleUrl = responsibleUrl; String finalCorrectiveUrl = correctiveUrl; String finalQualityUrl = qualityUrl; XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render( new HashMap() {{ put("control", controlSheetExportDto); put("discovererUrl", StringUtils.isNotBlank(finalDiscovererUrl) ? Pictures.ofLocal(imgUrl + "/" + finalDiscovererUrl).create() : null); put("responsibleUrl", StringUtils.isNotBlank(finalResponsibleUrl) ? Pictures.ofLocal(imgUrl + "/" + finalResponsibleUrl).create() : null); put("correctiveUrl", StringUtils.isNotBlank(finalCorrectiveUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectiveUrl).create() : null); put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).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("导出失败"); } } }