package com.yuanchu.mom.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; 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.config.ConfigureBuilder; import com.deepoove.poi.data.Pictures; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.dto.QualitySuperviseDetailsAccordingDto; import com.yuanchu.mom.dto.QualitySuperviseDetailsCorrectDto; import com.yuanchu.mom.dto.QualitySuperviseDetailsDto; import com.yuanchu.mom.dto.QualitySuperviseDto; import com.yuanchu.mom.excel.QualitySuperviseDetailsUpload; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.QualitySuperviseDetailsService; import com.yuanchu.mom.service.QualitySuperviseService; import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import com.yuanchu.mom.utils.XWPFDocumentUtils; import com.yuanchu.mom.utils.DateImageUtil; 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.IOException; 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.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** * 质量监督主表 * * @author zhuo * @since 2024-11-07 */ @Service @Transactional(rollbackFor = Exception.class) public class QualitySuperviseServiceImpl extends ServiceImpl implements QualitySuperviseService { @Resource private QualitySuperviseDetailsService qualitySuperviseDetailsService; @Resource private QualitySuperviseDetailsMapper qualitySuperviseDetailsMapper; @Resource private QualitySuperviseDetailsRecordMapper qualitySuperviseDetailsRecordMapper; @Resource private QualitySuperviseDetailsAccordingMapper qualitySuperviseDetailsAccordingMapper; @Resource private QualitySuperviseDetailsCorrectMapper qualitySuperviseDetailsCorrectMapper; @Resource private QualitySuperviseDetailsCorrectFileMapper qualitySuperviseDetailsCorrectFileMapper; @Resource private GetLook getLook; @Resource private UserMapper userMapper; @Value("${file.path}") private String imgUrl; @Value("${wordUrl}") private String wordUrl; /** * 导入监督计划 * @param file * @return */ @Override public boolean importQualitySupervise(MultipartFile file) { // 当前登录用户 Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); User user = userMapper.selectById(userId); // 文件名称 String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")); QualitySupervise qualitySupervise = new QualitySupervise(); qualitySupervise.setSuperviseName(fileName); qualitySupervise.setWriteUserId(userId); qualitySupervise.setWriteUserName(user.getName()); qualitySupervise.setWriteTime(LocalDateTime.now()); baseMapper.insert(qualitySupervise); List detailsUploadList = new ArrayList<>(); // 导入附件内容 try { // excel解析 EasyExcel.read(file.getInputStream(), QualitySuperviseDetailsUpload.class, new AnalysisEventListener() { @Override public void invoke(QualitySuperviseDetailsUpload detailsUpload, AnalysisContext analysisContext) { // 判断是否为空 if (StringUtils.isNotBlank(detailsUpload.getSuperviseTime()) && StringUtils.isNotBlank(detailsUpload.getSupervisePurpose()) && StringUtils.isNotBlank(detailsUpload.getSuperviseProject()) && StringUtils.isNotBlank(detailsUpload.getSupervisee()) && StringUtils.isNotBlank(detailsUpload.getSuperviseReason())) { // 对象复制 QualitySuperviseDetails superviseDetails = new QualitySuperviseDetails(); BeanUtils.copyProperties(detailsUpload, superviseDetails); superviseDetails.setSuperviseId(qualitySupervise.getSuperviseId()); detailsUploadList.add(superviseDetails); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }).sheet().doRead(); qualitySuperviseDetailsService.saveBatch(detailsUploadList); } catch (IOException e) { throw new RuntimeException(e); } return true; } /** * 监督计划批准 * @param qualitySupervise * @return */ @Override public boolean ratifyQualitySupervise(QualitySupervise qualitySupervise) { // 当前登录用户 Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); User user = userMapper.selectById(userId); baseMapper.update(null, Wrappers.lambdaUpdate() .eq(QualitySupervise::getSuperviseId, qualitySupervise.getSuperviseId()) .set(QualitySupervise::getRatifyUserId, userId) .set(QualitySupervise::getRatifyUserName, user.getName()) .set(QualitySupervise::getRatifyRemark, qualitySupervise.getRatifyRemark()) .set(QualitySupervise::getRatifyStatus, qualitySupervise.getRatifyStatus()) .set(QualitySupervise::getRatifyTime, LocalDateTime.now()) ); return true; } /** * 监督计划列表 * @param page * @param qualitySupervise * @return */ @Override public IPage pageQualitySupervise(Page page, QualitySupervise qualitySupervise) { return baseMapper.pageQualitySupervise(page, QueryWrappers.queryWrappers(qualitySupervise)); } /** * 监督计划详情列表 * @return */ @Override public IPage pageQualitySuperviseDetail(Page page, QualitySuperviseDetails qualitySuperviseDetails) { if (qualitySuperviseDetails.getSuperviseId() == null) { return new Page(); } return qualitySuperviseDetailsMapper.pageQualitySuperviseDetail(page, QueryWrappers.queryWrappers(qualitySuperviseDetails)); } /** * 导出监督计划 * @param superviseId * @param response */ @Override public void exportQualitySupervise(Integer superviseId, HttpServletResponse response) { QualitySupervise qualitySupervise = baseMapper.selectById(superviseId); //获取提交人的签名地址 String writeUrl = userMapper.selectById(qualitySupervise.getWriteUserId()).getSignatureUrl(); if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) { throw new ErrorException("找不到检验人的签名"); } //获取批准人的签名地址 String ratifyUrl = null; if (qualitySupervise.getRatifyUserId() != null) { ratifyUrl = userMapper.selectById(qualitySupervise.getRatifyUserId()).getSignatureUrl(); if (StringUtils.isBlank(ratifyUrl)) { throw new ErrorException("找不到复核人的签名"); } } // 查询详情 List qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.lambdaQuery() .eq(QualitySuperviseDetails::getSuperviseId, superviseId)); // 判断监督目的一样的值 AtomicInteger count = new AtomicInteger(1); Map> listMap = qualitySuperviseDetails.stream().collect(Collectors.groupingBy(QualitySuperviseDetails::getSupervisePurpose)); listMap.forEach((s, details) -> { // 查询数量超过1的 if (details.size() > 1) { for (QualitySuperviseDetails detail : details) { detail.setSupervisePurpose(detail.getSupervisePurpose() + "∑" + count); } count.getAndIncrement(); } }); int index = 1; for (QualitySuperviseDetails qualitySuperviseDetail : qualitySuperviseDetails) { qualitySuperviseDetail.setIndex(index); index++; } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-supervise.docx"); String finalRatifyUrl = ratifyUrl; Configure configure = Configure.builder() .bind("superviseDetailList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("superviseDetailList", qualitySuperviseDetails); put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null); put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null); put("writeDateUrl", qualitySupervise.getWriteTime() != null ? Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getWriteTime())).create() : null); put("ratifyDateUrl", qualitySupervise.getRatifyTime() != null ? Pictures.ofStream(DateImageUtil.createDateImage(qualitySupervise.getRatifyTime())).create() : null); }}); // 处理换行问题 XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument()); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( qualitySupervise.getSuperviseName(), "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("导出失败"); } } /************************************************ 记录 ******************************************************/ /** * 查询监督记录信息 * @param superviseDetailsId * @return */ @Override public QualitySuperviseDetailsRecord getSuperviseDetailRecord(Integer superviseDetailsId) { QualitySuperviseDetailsRecord detailsRecord; detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.lambdaQuery() .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId)); if (detailsRecord == null) { detailsRecord = new QualitySuperviseDetailsRecord(); } // 添加批准人名称 if (detailsRecord.getRatifyUserId() != null) { User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId")); detailsRecord.setRatifyUserName(user.getName()); } return detailsRecord; } /** * 新增监督记录信息 * @param qualitySuperviseDetailsRecord * @return */ @Override public boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) { if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) { throw new ErrorException("缺少监督详细信息id"); } qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord); return true; } /** * 监督记录批准 * @param qualitySuperviseDetailsRecord * @return */ @Override public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) { if (qualitySuperviseDetailsRecord.getIsAccording() == null) { throw new ErrorException("缺少最终结果"); } qualitySuperviseDetailsRecordMapper.update(null, Wrappers.lambdaUpdate() .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId()) .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion()) .set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now()) .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording()) .set(QualitySuperviseDetailsRecord::getIsFinish, 1)); return true; } /** * 导出监督记录表 * @param superviseDetailsId * @param response */ @Override public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) { QualitySuperviseDetailsRecord recordDto = qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId); //获取技术负责人的签名地址 String ratifyUrl = null; if (recordDto.getRatifyUserId() != null) { ratifyUrl = userMapper.selectById(recordDto.getRatifyUserId()).getSignatureUrl(); if (StringUtils.isBlank(ratifyUrl)) { throw new ErrorException("找不到技术负责人的签名"); } } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx"); ConfigureBuilder builder = Configure.builder(); builder.useSpringEL(true); String finalRatifyUrl = ratifyUrl; XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render( new HashMap() {{ put("supervision", recordDto); put("technicalDirectorUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null); put("technicalDirectorDateUrl", recordDto.getRatifyTime() != null ? Pictures.ofStream(DateImageUtil.createDateImage(recordDto.getRatifyTime())).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("导出失败"); } } /************************************************* 不合格工作控制单 ********************************************************/ /** * 新增监督记录不符合控制信息 * @param detailsAccording * @return */ @Override public boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) { QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording(); // 当前登录用户信息和部门 User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId")); String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); switch (detailsAccording.getFlowType()) { // 不符合工作情况记录 case 0: if (detailsAccording.getSuperviseDetailsId() == null) { throw new ErrorException("缺少质量监督详情Id"); } according.setSuperviseDetailsId(detailsAccording.getSuperviseDetailsId()); according.setOccurrenceDepartment(detailsAccording.getOccurrenceDepartment());//发生部门 according.setHeadDepartment(detailsAccording.getHeadDepartment());//部门负责人 according.setFindWay(detailsAccording.getFindWay());//发现途径 according.setRecordDetail(detailsAccording.getRecordDetail());//不符合记录详细 according.setRecordAccording(detailsAccording.getRecordAccording());//不合格记录依据 according.setFoundDepartment(departmentLimsName);//发现部门 according.setRecordUserId(user.getId());//记录人id according.setRecordUserName(user.getName());//记录人 according.setRecordTime(LocalDate.now());//记录时间 // 处理人信息 User actionsUser = userMapper.selectById(detailsAccording.getActionsUserId()); String actionsDepartmentLims = userMapper.selectUserDepartmentLimsName(actionsUser.getId()); according.setResponsibleDepartment(actionsDepartmentLims);//责任部门 according.setActionsUserId(actionsUser.getId());//处理人id according.setActionsUserName(actionsUser.getName());//处理人 according.setSupervisedUserId(detailsAccording.getSupervisedUserId());//被监督人id // 被监督人 User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId()); according.setSupervisedUserName(supervisedUser.getName());//被监督人 according.setActionsTime(detailsAccording.getSupervisedTime());//被监督时间 qualitySuperviseDetailsAccordingMapper.insert(according); break; // 1处理措施 case 1: according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId()); according.setEliminateMeasure(detailsAccording.getEliminateMeasure());//清除不符合措施 according.setActionsTime(LocalDate.now());//处理时间 // 纠正负责人信息 User correctsUser = userMapper.selectById(detailsAccording.getCorrectUserId()); according.setCorrectUserId(correctsUser.getId());//纠正负责人id according.setCorrectUserName(correctsUser.getName());//纠正负责人 qualitySuperviseDetailsAccordingMapper.updateById(according); break; // 纠正措施 case 2: according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId()); according.setCorrectContent(detailsAccording.getCorrectContent());//纠正措施内容 according.setIsCorrect(detailsAccording.getIsCorrect());//是否纠正处理 according.setCorrectTime(LocalDate.now());//纠正填写时间 // 质量负责人 User qualityUser = userMapper.selectById(detailsAccording.getQualityManagerUserId()); according.setQualityManagerUserId(qualityUser.getId());//质量负责人id according.setQualityManagerUserName(qualityUser.getName());//质量负责人 qualitySuperviseDetailsAccordingMapper.updateById(according); break; //是否通知客户可恢复工作 case 3: according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId()); according.setNotifyCustomer(detailsAccording.getNotifyCustomer());//通知客户 according.setBackToWork(detailsAccording.getBackToWork());//回复工作 according.setQualityManagerTime(LocalDate.now());//日期 according.setIsFinish(1); qualitySuperviseDetailsAccordingMapper.updateById(according); break; } return true; } /** * 查询监督记录不符合控制信息 * @param superviseDetailsId * @return */ @Override public QualitySuperviseDetailsAccording getSuperviseDetailAccording(Integer superviseDetailsId) { QualitySuperviseDetailsAccording detailsAccording; detailsAccording = qualitySuperviseDetailsAccordingMapper.selectOne(Wrappers.lambdaQuery() .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsId, superviseDetailsId)); if (detailsAccording == null) { detailsAccording = new QualitySuperviseDetailsAccording(); } return detailsAccording; } /** * 查询不符合项 * @param page * @param detailsAccording * @return */ @Override public IPage pageSuperviseDetailAccording(Page page, QualitySuperviseDetailsAccording detailsAccording) { return qualitySuperviseDetailsAccordingMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsAccording)); } /** * 导出监督记录不符合控制信息 * @param superviseDetailAccordingId * @param response */ @Override public void superviseDetailAccordingExport(Integer superviseDetailAccordingId, HttpServletResponse response) { QualitySuperviseDetailsAccordingDto exportDto = qualitySuperviseDetailsAccordingMapper.selectSuperviseDetailsAccording(superviseDetailAccordingId); // 发现部门 String discovererUrl = null; if (exportDto.getRecordUserId() != null) { discovererUrl = userMapper.selectById(exportDto.getRecordUserId()).getSignatureUrl(); if (StringUtils.isBlank(discovererUrl)) { throw new ErrorException("找不到发现部门人的签名"); } } // 处理措施负责人 String responsibleUrl = null; if (exportDto.getCorrectUserId() != null) { responsibleUrl = userMapper.selectById(exportDto.getCorrectUserId()).getSignatureUrl(); if (StringUtils.isBlank(responsibleUrl)) { throw new ErrorException("找不到处理措施负责人的签名"); } } // 技术负责人 String correctiveUrl = null; if (exportDto.getQualityManagerUserId() != null) { correctiveUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl(); if (StringUtils.isBlank(correctiveUrl)) { throw new ErrorException("找不到技术负责人的签名"); } } // 质量负责人 String qualityUrl = null; if (exportDto.getQualityManagerUserId() != null) { qualityUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl(); if (StringUtils.isBlank(qualityUrl)) { throw new ErrorException("找不到质量负责人的签名"); } } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-according.docx"); ConfigureBuilder builder = Configure.builder(); String finalDiscovererUrl = discovererUrl; String finalResponsibleUrl = responsibleUrl; String finalCorrectiveUrl = correctiveUrl; String finalQualityUrl = qualityUrl; XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render( new HashMap() {{ put("control", exportDto); 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("导出失败"); } } /************************************************* 纠正措施处理单 ********************************************************/ @Override public boolean addSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) { QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect(); // 当前登录用户信息和部门 User user = userMapper.selectById(getLook.selectPowerByMethodAndUserId(null).get("userId")); String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); switch (detailsCorrect.getFlowType()) { // 不合格提出 case 0: if (detailsCorrect.getSuperviseDetailsId() == null) { throw new ErrorException("缺少质量监督详情Id"); } correct.setSuperviseDetailsId(detailsCorrect.getSuperviseDetailsId()); 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原因分析人 qualitySuperviseDetailsCorrectMapper.insert(correct); break; // 原因分析 case 1: correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId()); 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纠正人 qualitySuperviseDetailsCorrectMapper.updateById(correct); break; // 纠正措施 case 2: correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId()); 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验证人 qualitySuperviseDetailsCorrectMapper.updateById(correct); break; // 验证结果 case 3: correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId()); correct.setValidationResult(detailsCorrect.getValidationResult());//3验证结果 correct.setValidationTime(LocalDate.now());// 3验证时间 correct.setIsFinish(1); qualitySuperviseDetailsCorrectMapper.updateById(correct); break; } return true; } /** * 查询监督纠正处理 * @param superviseDetailsId * @return */ @Override public QualitySuperviseDetailsCorrect getSuperviseDetailCorrect(Integer superviseDetailsId) { QualitySuperviseDetailsCorrect detailsCorrect; detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectOne(Wrappers.lambdaQuery() .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsId, superviseDetailsId)); if (detailsCorrect == null) { detailsCorrect = new QualitySuperviseDetailsCorrect(); } return detailsCorrect; } /** * 查询监督纠正措施列表 * @param page * @param detailsCorrect * @return */ @Override public IPage pageSuperviseDetailCorrect(Page page, QualitySuperviseDetailsCorrect detailsCorrect) { return qualitySuperviseDetailsCorrectMapper.pageSuperviseDetailAccording(page, QueryWrappers.queryWrappers(detailsCorrect)); } /** * 新增监督纠正措施附件 * @param superviseDetailsCorrectId * @param file * @return */ @Override public boolean uploadSuperviseDetailCorrectFile(Integer superviseDetailsCorrectId, MultipartFile file) { if (superviseDetailsCorrectId == null) { throw new ErrorException("缺少纠正措施id"); } String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); QualitySuperviseDetailsCorrectFile superviseDetailsCorrectFile = new QualitySuperviseDetailsCorrectFile(); superviseDetailsCorrectFile.setSuperviseDetailsCorrectId(superviseDetailsCorrectId); superviseDetailsCorrectFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // 是图片 path = imgUrl; superviseDetailsCorrectFile.setType(1); } else { // 是文件 path = wordUrl; superviseDetailsCorrectFile.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)); superviseDetailsCorrectFile.setFileUrl(pathName); qualitySuperviseDetailsCorrectFileMapper.insert(superviseDetailsCorrectFile); return true; } catch (Exception e) { e.printStackTrace(); throw new ErrorException(e.getMessage()); } } /** * 查询监督纠正措施附件 * @param superviseDetailsCorrectId * @return */ @Override public List getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId) { return qualitySuperviseDetailsCorrectFileMapper.selectList(Wrappers.lambdaQuery() .eq(QualitySuperviseDetailsCorrectFile::getSuperviseDetailsCorrectId, superviseDetailsCorrectId)); } /** * 导出监督纠正措施 * @param superviseDetailsCorrectId * @param response */ @Override public void exportSuperviseDetaillCorrect(Integer superviseDetailsCorrectId, HttpServletResponse response) { QualitySuperviseDetailsCorrect detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectById(superviseDetailsCorrectId); QualitySuperviseDetailsCorrectDto detailsCorrectDto = new QualitySuperviseDetailsCorrectDto(); BeanUtils.copyProperties(detailsCorrect, detailsCorrectDto); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 提出时间 detailsCorrectDto.setRaiseTimeString(detailsCorrectDto.getRaiseTime() != null ? detailsCorrectDto.getRaiseTime().format(formatter) : null); // 原因分析时间 detailsCorrectDto.setCauseTimeString(detailsCorrectDto.getCauseTime() != null ? detailsCorrectDto.getCauseTime().format(formatter) : null); // 纠正时间 detailsCorrectDto.setCorrectTimeString(detailsCorrectDto.getCorrectTime() != null ? detailsCorrectDto.getCorrectTime().format(formatter) : null); // 验证时间 detailsCorrectDto.setValidationTimeString(detailsCorrectDto.getValidationTime() != null ? detailsCorrectDto.getValidationTime().format(formatter) : null); // 提出人签名 String raiseUrl = null; if (detailsCorrectDto.getRaiseUserId() != null) { raiseUrl = userMapper.selectById(detailsCorrectDto.getRaiseUserId()).getSignatureUrl(); if (StringUtils.isBlank(raiseUrl)) { throw new ErrorException("找不到提出人的签名"); } } // 原因分析人 String causeUrl = null; if (detailsCorrectDto.getCauseUserId() != null) { causeUrl = userMapper.selectById(detailsCorrectDto.getCauseUserId()).getSignatureUrl(); if (StringUtils.isBlank(causeUrl)) { throw new ErrorException("找不到原因分析人的签名"); } } // 纠正人 String correctUrl = null; if (detailsCorrectDto.getCorrectUserId() != null) { correctUrl = userMapper.selectById(detailsCorrectDto.getCorrectUserId()).getSignatureUrl(); if (StringUtils.isBlank(correctUrl)) { throw new ErrorException("找不到纠正人的签名"); } } // 验证人 String validationUrl = null; if (detailsCorrectDto.getValidationUserId() != null) { validationUrl = userMapper.selectById(detailsCorrectDto.getValidationUserId()).getSignatureUrl(); if (StringUtils.isBlank(validationUrl)) { throw new ErrorException("找不到验证人的签名"); } } // 获取路径 InputStream inputStream = this.getClass().getResourceAsStream("/static/supervise-detail-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() {{ put("correct", detailsCorrectDto); 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("导出失败"); } } }