package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.data.Pictures; import com.yuanchu.mom.dto.IncidentReportAddDto; import com.yuanchu.mom.dto.IncidentReportExportWordDto; import com.yuanchu.mom.excel.IncidentReportExport; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.IncidentReportMapper; import com.yuanchu.mom.mapper.UserMapper; import com.yuanchu.mom.numgen.NumberGenerator; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; /** *

* 设备验收添加验收字段表 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-09-19 03:54:49 */ @Service //@AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class IncidentReportServiceImpl extends ServiceImpl implements IncidentReportService { private UserMapper userMapper; private IncidentSparePartsService incidentSparePartsService; private IncidentFileService incidentFileService; private IncidentInstallService incidentInstallService; private IncidentAcceptanceCheckService incidentAcceptanceCheckService; private final NumberGenerator numberGenerator; @Value("${file.path}") private String imgUrl; public IncidentReportServiceImpl(UserMapper userMapper, IncidentSparePartsService incidentSparePartsService, IncidentFileService incidentFileService, IncidentInstallService incidentInstallService, IncidentAcceptanceCheckService incidentAcceptanceCheckService, NumberGenerator numberGenerator) { this.userMapper = userMapper; this.incidentSparePartsService = incidentSparePartsService; this.incidentFileService = incidentFileService; this.incidentInstallService = incidentInstallService; this.incidentAcceptanceCheckService = incidentAcceptanceCheckService; this.numberGenerator = numberGenerator; } @Override public void saveIncidentReportData(IncidentReportAddDto incidentReportAddDto) { if (ObjectUtils.isEmpty(incidentReportAddDto.getProcessNumber())) { String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date()); String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date()); String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-07FM " + month + "-" + year + month, IncidentReport::getProcessNumber); incidentReportAddDto.setProcessNumber(processNumber); } this.saveOrUpdate(incidentReportAddDto); // 备件确认List if (ObjectUtils.isNotEmpty(incidentReportAddDto.getSparePartsConfirmationList())) { incidentReportAddDto.getSparePartsConfirmationList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId())); incidentSparePartsService.saveOrUpdateBatch(incidentReportAddDto.getSparePartsConfirmationList()); } // 文件确认List if (ObjectUtils.isNotEmpty(incidentReportAddDto.getFileClassConfirmationList())) { incidentReportAddDto.getFileClassConfirmationList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId())); incidentFileService.saveOrUpdateBatch(incidentReportAddDto.getFileClassConfirmationList()); } // 安装验收记录 if (ObjectUtils.isNotEmpty(incidentReportAddDto.getInstallationAcceptanceRecordList())) { incidentReportAddDto.getInstallationAcceptanceRecordList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId())); incidentInstallService.saveOrUpdateBatch(incidentReportAddDto.getInstallationAcceptanceRecordList()); } // 验收核查记录 if (ObjectUtils.isNotEmpty(incidentReportAddDto.getAcceptanceCheckRecordList())) { incidentReportAddDto.getAcceptanceCheckRecordList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId())); incidentAcceptanceCheckService.saveOrUpdateBatch(incidentReportAddDto.getAcceptanceCheckRecordList()); } } @Override public IPage getByDeviceId(Integer deviceId, Page page, String processNumber) { return baseMapper.getByDeviceId(page, deviceId, processNumber); } @Override public void deleteIncidentReport(Integer id) { baseMapper.deleteById(id); incidentSparePartsService.remove(Wrappers.lambdaQuery().eq(IncidentSpareParts::getIncidentId, id)); incidentFileService.remove(Wrappers.lambdaQuery().eq(IncidentFile::getIncidentId, id)); incidentInstallService.remove(Wrappers.lambdaQuery().eq(IncidentInstall::getIncidentId, id)); incidentAcceptanceCheckService.remove(Wrappers.lambdaQuery().eq(IncidentAcceptanceCheck::getIncidentId, id)); } @Override public IncidentReportAddDto getShowIncidentReport(Integer id) { return baseMapper.getShowIncidentReport(id); } @Override public void deleteIncidentReportAll(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId) { if (ObjectUtils.isNotEmpty(sparePartsId)) { incidentSparePartsService.removeById(sparePartsId); } if (ObjectUtils.isNotEmpty(fileId)) { incidentFileService.removeById(fileId); } if (ObjectUtils.isNotEmpty(installId)) { incidentInstallService.removeById(installId); } if (ObjectUtils.isNotEmpty(acceptanceCheckId)) { incidentAcceptanceCheckService.removeById(acceptanceCheckId); } } @Override public List incidentReportExport(Integer deviceId) { return baseMapper.incidentReportExport(deviceId); } /** * 导出验收报告 * @param deviceId 设备id * @param processNumber 流程号 * @param response 响应Word文档 */ @Override public void acceptanceCertificateExport(Integer deviceId, String processNumber, HttpServletResponse response) { IncidentReportExportWordDto incidentReport = baseMapper.acceptanceCertificateExport(deviceId, processNumber); String submitOperatingPersonnel = incidentReport.getSubmitOperatingPersonnel(); String operatingPersonnelNameUrl = null; if (submitOperatingPersonnel != null) { operatingPersonnelNameUrl = userMapper.selectOne(Wrappers.lambdaQuery() .eq(User::getName, submitOperatingPersonnel)) .getSignatureUrl(); if (StringUtils.isBlank(operatingPersonnelNameUrl)) { throw new ErrorException("找不到申请人的签名"); } } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/word/incident-report.docx"); Configure configure = Configure.builder() .build(); String fileOperatingPersonnelNameUrl = operatingPersonnelNameUrl; XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("incidentReport", incidentReport); put("submitOperatingPersonnelUrl", StringUtils.isNotBlank(fileOperatingPersonnelNameUrl) ? Pictures.ofLocal( imgUrl + "/" + fileOperatingPersonnelNameUrl).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("导出失败"); } } }