From 4f3a98f19143865cdc1de4791e8a95d96bd40c65 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期五, 01 八月 2025 13:27:59 +0800 Subject: [PATCH] yys 密码已重置 --- cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java | 835 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 835 insertions(+), 0 deletions(-) diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java new file mode 100644 index 0000000..e8da9e5 --- /dev/null +++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java @@ -0,0 +1,835 @@ +package com.ruoyi.process.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.ruoyi.common.constant.MenuJumpPathConstants; +import com.ruoyi.common.core.domain.entity.InformationNotification; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.DateImageUtil; +import com.ruoyi.common.utils.QueryWrappers; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.WxCpUtils; +import com.ruoyi.device.pojo.DeviceExamineRecord; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; +import com.ruoyi.inspect.util.UserUtils; +import com.ruoyi.inspect.util.XWPFDocumentUtils; +import com.ruoyi.process.dto.QualityMonitorDetailsDto; +import com.ruoyi.process.dto.QualityMonitorDetailsEvaluateDto; +import com.ruoyi.process.dto.QualityMonitorDto; +import com.ruoyi.process.excel.QualityMonitorDetailsUpload; +import com.ruoyi.process.mapper.*; +import com.ruoyi.process.pojo.*; +import com.ruoyi.process.service.QualityMonitorDetailsEvaluateService; +import com.ruoyi.process.service.QualityMonitorDetailsRatifyService; +import com.ruoyi.process.service.QualityMonitorDetailsService; +import com.ruoyi.process.service.QualityMonitorService; +import com.ruoyi.system.mapper.UserMapper; +import com.ruoyi.system.service.InformationNotificationService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +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.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 璐ㄩ噺鐩戞帶璁″垝涓昏〃 + * + * @author zhuo + * @since 2024-11-06 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class QualityMonitorServiceImpl extends ServiceImpl<QualityMonitorMapper, QualityMonitor> implements QualityMonitorService { + + @Resource + private QualityMonitorDetailsService qualityMonitorDetailsService; + @Resource + private QualityMonitorDetailsMapper qualityMonitorDetailsMapper; + @Resource + private UserMapper userMapper; + @Resource + private QualityMonitorDetailsRatifyMapper qualityMonitorDetailsRatifyMapper; + @Resource + private QualityMonitorDetailsRatifyService qualityMonitorDetailsRatifyService; + @Resource + private QualityMonitorDetailsEvaluateMapper qualityMonitorDetailsEvaluateMapper; + @Resource + private QualityMonitorDetailsEvaluateService qualityMonitorDetailsEvaluateService; + @Resource + private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper; + @Resource + private InformationNotificationService informationNotificationService; + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Value("${file.path}") + private String imgUrl; + + @Value("${wordUrl}") + private String wordUrl; + + + /** + * 瀵煎叆鐩戞帶璁″垝 + * @param file + * @return + */ + @Override + public boolean importQualityMonitor(MultipartFile file, QualityMonitor monitor) { + // 褰撳墠鐧诲綍鐢ㄦ埛 + Integer userId = SecurityUtils.getUserId().intValue(); + // 鏂囦欢鍚嶇О + String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")); + QualityMonitor qualityMonitor = new QualityMonitor(); + qualityMonitor.setMonitorName(fileName); + qualityMonitor.setMonitorYear(monitor.getMonitorYear()); + qualityMonitor.setWriteUserId(userId); + qualityMonitor.setExamineUserId(monitor.getExamineUserId()); + qualityMonitor.setWriteTime(LocalDateTime.now()); + baseMapper.insert(qualityMonitor); + + if (monitor.getExamineUserId() == null) { + throw new ErrorException("缂哄皯瀹℃牳浜�"); + } + + User user = userMapper.selectById(userId); + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戞帶璁″垝瀹℃牳閫氱煡"); + info.setContent(fileName + "璐ㄩ噺鐩戞帶璁″垝寰呭鏍�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(monitor.getExamineUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_MONITOR); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(monitor.getExamineUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戞帶璁″垝瀹℃牳閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝"; + message += "\n" + fileName + "璐ㄩ噺鐩戞帶璁″垝寰呭鏍�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + + List<QualityMonitorDetails> detailsUploadList = new ArrayList<>(); + + // 瀵煎叆闄勪欢鍐呭 + try { + // excel瑙f瀽 + EasyExcel.read(file.getInputStream(), QualityMonitorDetailsUpload.class, new AnalysisEventListener<QualityMonitorDetailsUpload>() { + @Override + public void invoke(QualityMonitorDetailsUpload detailsUpload, AnalysisContext analysisContext) { + // 鍒ゆ柇鏄惁涓虹┖ + if (StringUtils.isBlank(detailsUpload.getPlannedTime())) { + throw new ErrorException("璁″垝寮�灞曟椂闂翠笉鑳戒负绌�"); + } + // 瀵硅薄澶嶅埗 + QualityMonitorDetails monitorDetails = new QualityMonitorDetails(); + BeanUtils.copyProperties(detailsUpload, monitorDetails); + monitorDetails.setQualityMonitorId(qualityMonitor.getQualityMonitorId()); + + detailsUploadList.add(monitorDetails); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + }).sheet().doRead(); + qualityMonitorDetailsService.saveBatch(detailsUploadList); + + } catch (IOException e) { + throw new RuntimeException(e); + } + return true; + } + + /** + * 鐩戞帶璁″垝瀹℃牳 + * @param qualityMonitor + * @return + */ + @Override + public boolean examineQualityMonitor(QualityMonitor qualityMonitor) { + if (qualityMonitor.getRatifyUserId() == null) { + throw new ErrorException("缂哄皯鎵瑰噯浜�"); + } + + // 褰撳墠鐧诲綍鐢ㄦ埛 + baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate() + .eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId()) + .set(QualityMonitor::getRatifyUserId, qualityMonitor.getRatifyUserId()) + .set(QualityMonitor::getExamineRemark, qualityMonitor.getExamineRemark()) + .set(QualityMonitor::getExamineStatus, qualityMonitor.getExamineStatus()) + .set(QualityMonitor::getExamineTime, LocalDateTime.now()) + ); + + QualityMonitor monitor = baseMapper.selectById(qualityMonitor.getQualityMonitorId()); + + Integer userId = SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戞帶璁″垝鎵瑰噯閫氱煡"); + info.setContent(monitor.getMonitorName() + "璐ㄩ噺鐩戞帶璁″垝寰呮壒鍑�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(qualityMonitor.getRatifyUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_MONITOR); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(qualityMonitor.getRatifyUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戞帶璁″垝鎵瑰噯閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝"; + message += "\n" + monitor.getMonitorName() + "璐ㄩ噺鐩戞帶璁″垝寰呮壒鍑�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + return true; + } + + /** + * 鐩戞帶璁″垝鎵瑰噯 + * @param qualityMonitor + * @return + */ + @Override + public boolean ratifyQualityMonitor(QualityMonitor qualityMonitor) { + // 褰撳墠鐧诲綍鐢ㄦ埛 + baseMapper.update(null, Wrappers.<QualityMonitor>lambdaUpdate() + .eq(QualityMonitor::getQualityMonitorId, qualityMonitor.getQualityMonitorId()) + .set(QualityMonitor::getRatifyRemark, qualityMonitor.getRatifyRemark()) + .set(QualityMonitor::getRatifyStatus, qualityMonitor.getRatifyStatus()) + .set(QualityMonitor::getRatifyTime, LocalDateTime.now()) + ); + return true; + } + + /** + * 鐩戞帶璁″垝鍒楄〃 + * @param page + * @param qualityMonitor + * @return + */ + @Override + public IPage<QualityMonitorDto> pageQualityMonitor(Page page, QualityMonitor qualityMonitor) { + return baseMapper.pageQualityMonitor(page, QueryWrappers.queryWrappers(qualityMonitor)); + } + + /** + * 鐩戞帶璁″垝璇︽儏鍒楄〃 + * @param page + * @param qualityMonitorDetails + * @return + */ + @Override + public IPage<QualityMonitorDetailsDto> pageQualityMonitorDetail(Page page, QualityMonitorDetails qualityMonitorDetails) { + if (qualityMonitorDetails.getQualityMonitorId() == null) { + return new Page(); + } + return qualityMonitorDetailsMapper.pageQualityMonitorDetail(page, QueryWrappers.queryWrappers(qualityMonitorDetails)); + } + + /** + * 瀵煎嚭鐩戞帶璁″垝 + * @param qualityMonitorId + * @param response + */ + @Override + public void exportQualityMonitorDetail(Integer qualityMonitorId, HttpServletResponse response) { + // 鏌ヨ璇︽儏 + QualityMonitor qualityMonitor = baseMapper.selectById(qualityMonitorId); + + //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃 + String writeUrl = userMapper.selectById(qualityMonitor.getWriteUserId()).getSignatureUrl(); + if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) { + throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�"); + } + + //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃 + String examineUrl = null; + if (qualityMonitor.getExamineUserId() != null) { + examineUrl = userMapper.selectById(qualityMonitor.getExamineUserId()).getSignatureUrl(); + if (StringUtils.isBlank(examineUrl)) { + throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�"); + } + } + + //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃 + String ratifyUrl = null; + if (qualityMonitor.getRatifyUserId() != null) { + ratifyUrl = userMapper.selectById(qualityMonitor.getRatifyUserId()).getSignatureUrl(); + if (StringUtils.isBlank(ratifyUrl)) { + throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�"); + } + } + + // 鏌ヨ璇︽儏 + List<QualityMonitorDetails> qualityMonitorDetails = qualityMonitorDetailsMapper.selectList(Wrappers.<QualityMonitorDetails>lambdaQuery() + .eq(QualityMonitorDetails::getQualityMonitorId, qualityMonitorId)); + + // 鍒ゆ柇鐩戞帶鐩殑涓�鏍风殑鍊� + AtomicInteger count = new AtomicInteger(1); + Map<String, List<QualityMonitorDetails>> listMap = qualityMonitorDetails.stream().collect(Collectors.groupingBy(QualityMonitorDetails::getMonitorPurpose)); + listMap.forEach((s, details) -> { + // 鏌ヨ鏁伴噺瓒呰繃1鐨� + if (details.size() > 1) { + for (QualityMonitorDetails detail : details) { + detail.setMonitorPurpose(detail.getMonitorPurpose() + "鈭�" + count); + } + count.getAndIncrement(); + } + }); + + int index = 1; + for (QualityMonitorDetails qualityMonitorDetail : qualityMonitorDetails) { + qualityMonitorDetail.setIndex(index); + index++; + } + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor.docx"); + String finalExamineUrl = examineUrl; + String finalRatifyUrl = ratifyUrl; + Configure configure = Configure.builder() + .bind("monitorDetailList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("year", qualityMonitor.getMonitorYear()); + put("monitorDetailList", qualityMonitorDetails); + put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null); + put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null); + put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null); + put("writeDateUrl", qualityMonitor.getWriteTime() != null ? + Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getWriteTime())).create() : null); + put("examineDateUrl", qualityMonitor.getExamineTime() != null ? + Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getExamineTime())).create() : null); + put("ratifyDateUrl", qualityMonitor.getRatifyTime() != null ? + Pictures.ofStream(DateImageUtil.createDateImage(qualityMonitor.getRatifyTime())).create() : null); + }}); + + // 澶勭悊鎹㈣闂 + XWPFDocumentUtils.updateMergeByDocument(template.getXWPFDocument()); + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + qualityMonitor.getMonitorName(), "UTF-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + fileName + ".docx"); + OutputStream os = response.getOutputStream(); + template.write(os); + os.flush(); + os.close(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + } + + + /************************************************************ 鎵瑰噯 *******************************************************************/ + + /** + * 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅 + * @param qualityMonitorDetailsId + * @return + */ + @Override + public QualityMonitorDetailsRatify getQualityMonitorRatify(Integer qualityMonitorDetailsId) { + QualityMonitorDetailsRatify qualityMonitorDetailsRatify; + // 鏌ヨ鐩戞帶閮ㄩ棬id + qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery() + .eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, qualityMonitorDetailsId)); + + if (qualityMonitorDetailsRatify == null) { + // 鏌ヨ璇︽儏璁″垝 + QualityMonitorDetails qualityMonitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsId); + qualityMonitorDetailsRatify = new QualityMonitorDetailsRatify(); + qualityMonitorDetailsRatify.setQualityMonitorDetailsId(qualityMonitorDetailsId); // 璇︽儏id + qualityMonitorDetailsRatify.setMonitorProject(qualityMonitorDetails.getMonitorProject()); // 鐩戞帶椤圭洰 + qualityMonitorDetailsRatify.setMonitorData(DateUtil.format(new Date(), "yyyy-MM")); // 鐩戞帶鏃堕棿 + qualityMonitorDetailsRatify.setMonitorPurpose(qualityMonitorDetails.getMonitorPurpose()); // 鐩戞帶鐩殑 + qualityMonitorDetailsRatify.setParticipant(qualityMonitorDetails.getParticipant()); // 鍙傚姞浜哄憳 + qualityMonitorDetailsRatify.setBudget(qualityMonitorDetails.getBudget()); // 棰勭畻 + qualityMonitorDetailsRatify.setInspectionDepartment(userMapper.selectUserDepartmentLimsName( SecurityUtils.getUserId().intValue())); + } + + if (qualityMonitorDetailsRatify.getRatifyUserId() != null) { + qualityMonitorDetailsRatify.setRatifyName(userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId()).getName()); + } + + return qualityMonitorDetailsRatify; + } + + /** + * 鏂板鐩戞帶鎵瑰噯瀹炴柦 + * @param qualityMonitorDetailsRatify + * @return + */ + @Override + public boolean addQualityMonitorRatify(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) { + if (qualityMonitorDetailsRatify.getQualityMonitorDetailsId() == null) { + throw new ErrorException("缂哄皯鐩戞帶璇︾粏淇℃伅id"); + } + qualityMonitorDetailsRatifyService.saveOrUpdate(qualityMonitorDetailsRatify); + if (qualityMonitorDetailsRatify.getRatifyUserId() != null) { + + // 鏌ヨ璇︽儏淇℃伅 + QualityMonitorDetails monitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsRatify.getQualityMonitorDetailsId()); + + Integer userId =SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戞帶瀹炴柦鎵瑰噯閫氱煡"); + info.setContent("鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶瀹炴柦寰呮壒鍑�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(qualityMonitorDetailsRatify.getRatifyUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_MONITOR); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(qualityMonitorDetailsRatify.getRatifyUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戞帶瀹炴柦鎵瑰噯閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝"; + message += "\n" + "鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶瀹炴柦寰呮壒鍑�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + // 娓呯┖鐘舵�� + qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate() + .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId()) + .set(QualityMonitorDetailsRatify::getIsFinish, null)); + return true; + } + + /** + * 鐩戞帶璁″垝璇︽儏鎵瑰噯鎰忚 + * @param qualityMonitorDetailsRatify + * @return + */ + @Override + public boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) { + LambdaUpdateWrapper<QualityMonitorDetailsRatify> wrapper = Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate() + .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId()) + .set(QualityMonitorDetailsRatify::getRatifyOpinion, qualityMonitorDetailsRatify.getRatifyOpinion()) + .set(QualityMonitorDetailsRatify::getIsFinish, qualityMonitorDetailsRatify.getIsFinish()); + // 涓�0娓呴櫎瀹℃牳浜� + if (qualityMonitorDetailsRatify.getIsFinish().equals(0)) { + wrapper.set(QualityMonitorDetailsRatify::getRatifyUserId, null); + } + + qualityMonitorDetailsRatifyService.update(wrapper); + return true; + } + + /** + * 瀵煎嚭鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅 + * + * @param detailsRatifyId 鐩戞帶璁″垝璇︽儏瀹炴柦id + * @param response 鍝嶅簲 + */ + @Override + public void exportQualityMonitorRatify(Integer detailsRatifyId, HttpServletResponse response) { + QualityMonitorDetailsRatify qualityMonitorDetailsRatify = qualityMonitorDetailsRatifyMapper.selectOne(Wrappers.<QualityMonitorDetailsRatify>lambdaQuery().eq(QualityMonitorDetailsRatify::getQualityMonitorDetailsId, detailsRatifyId)); + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-details-ratify.docx"); + Configure configure = Configure.builder() + .bind("processMethodVerifyMachineAttachmentList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("qualityMonitorDetailsRatify", qualityMonitorDetailsRatify); + put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsRatify.getRatifyUserId())); + }}); + + 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(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + } + + /************************************************************ 璇勪环 *******************************************************************/ + + /** + * 鏌ヨ璐ㄩ噺鐩戞帶璇勪环 + * @param qualityMonitorDetailsId + * @return + */ + @Override + public QualityMonitorDetailsEvaluate getQualityMonitorEvaluate(Integer qualityMonitorDetailsId) { + return qualityMonitorDetailsEvaluateMapper.getQualityMonitorEvaluate(qualityMonitorDetailsId); + } + + /** + * 鏂板鐩戞帶璇勪环 + * @param qualityMonitorDetailsEvaluate + * @return + */ + @Override + public boolean addQualityMonitorEvaluate(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) { + if (qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId() == null) { + throw new ErrorException("缂哄皯鐩戞帶璇︾粏淇℃伅id"); + } + // 鏌ヨ璇︽儏淇℃伅 + QualityMonitorDetails monitorDetails = qualityMonitorDetailsMapper.selectById(qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId()); + // 鍙戦�佹秷鎭�氱煡 + // 鍒ゆ柇璇勫缁撹浜烘槸鍚︿负绌� + if (qualityMonitorDetailsEvaluate.getRatifyUserId() != null) { + + Integer userId =SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戞帶璇勪环缁撹閫氱煡"); + info.setContent("鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(qualityMonitorDetailsEvaluate.getRatifyUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_MONITOR); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(qualityMonitorDetailsEvaluate.getRatifyUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戞帶璇勪环缁撹閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝"; + message += "\n" + "鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + } else { + // 鐩戞帶缁撴灉璇勪环 + if (qualityMonitorDetailsEvaluate.getImplementUserId() != null) { + Integer userId =SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戞帶缁撴灉璇勪环"); + info.setContent("鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(qualityMonitorDetailsEvaluate.getImplementUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_MONITOR); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(qualityMonitorDetailsEvaluate.getImplementUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戞帶缁撴灉璇勪环"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戞帶璁″垝"; + message += "\n" + "鐩戞帶椤圭洰涓�: " + monitorDetails.getMonitorProject() + " 璐ㄩ噺鐩戞帶寰呰瘎浠风粨璁�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + } + + + return qualityMonitorDetailsEvaluateService.saveOrUpdate(qualityMonitorDetailsEvaluate); + } + + /** + * 鐩戞帶璇勪环瀹℃壒鎰忚 + * @param qualityMonitorDetailsEvaluate + * @return + */ + @Override + public boolean addMonitorEvaluateOpinion(QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) { + qualityMonitorDetailsEvaluateService.update(Wrappers.<QualityMonitorDetailsEvaluate>lambdaUpdate() + .eq(QualityMonitorDetailsEvaluate::getDetailsEvaluateId, qualityMonitorDetailsEvaluate.getDetailsEvaluateId()) + .set(QualityMonitorDetailsEvaluate::getRatifyOpinion, qualityMonitorDetailsEvaluate.getRatifyOpinion()) + .set(QualityMonitorDetailsEvaluate::getRatifyTime, LocalDateTime.now()) + .set(QualityMonitorDetailsEvaluate::getIsFinish, 1)); + return true; + } + + /** + * 鏂板鐩戞帶璇勪环闄勪欢琛� + * @param qualityMonitorDetailsId + * @param file + * @return + */ + @Override + public boolean uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file) { + if (qualityMonitorDetailsId == null) { + throw new ErrorException("缂哄皯鐩戞帶璇︽儏id"); + } + + String urlString; + String pathName; + String path; + String filename = file.getOriginalFilename(); + String contentType = file.getContentType(); + QualityMonitorDetailsEvaluateFile evaluateFile = new QualityMonitorDetailsEvaluateFile(); + evaluateFile.setDetailsEvaluateId(qualityMonitorDetailsId); + evaluateFile.setFileName(filename); + if (contentType != null && contentType.startsWith("image/")) { + // 鏄浘鐗� + path = imgUrl; + evaluateFile.setType(1); + } else { + // 鏄枃浠� + path = wordUrl; + evaluateFile.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)); + evaluateFile.setFileUrl(pathName); + qualityMonitorDetailsEvaluateFileMapper.insert(evaluateFile); + return true; + } catch (Exception e) { + e.printStackTrace(); + System.err.println("闄勪欢涓婁紶閿欒"); + return false; + } + } + + /** + * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃 + * @return + */ + @Override + public List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer qualityMonitorDetailsId) { + return qualityMonitorDetailsEvaluateFileMapper.selectList(Wrappers.<QualityMonitorDetailsEvaluateFile>lambdaQuery() + .eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, qualityMonitorDetailsId)); + } + + + /** + * 瀵煎嚭鐩戞帶璇勪环 + * @param detailsEvaluateId 鐩戞帶璇勪环id + */ + @Override + public void exportQualityMonitorEvaluate(Integer detailsEvaluateId, HttpServletResponse response) { + // 鏌ヨ鐩戞帶璇勪环淇℃伅 + QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate = qualityMonitorDetailsEvaluateMapper.selectOne(Wrappers.<QualityMonitorDetailsEvaluate>lambdaQuery().eq(QualityMonitorDetailsEvaluate::getQualityMonitorDetailsId,detailsEvaluateId)); + // 娓叉煋word妯℃澘瀵硅薄 + QualityMonitorDetailsEvaluateDto qualityMonitorDetailsEvaluateDto = new QualityMonitorDetailsEvaluateDto(); + BeanUtils.copyProperties(qualityMonitorDetailsEvaluate, qualityMonitorDetailsEvaluateDto); + // 鏍煎紡鍖栨椂闂� + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + qualityMonitorDetailsEvaluateDto.setRatifyTimeStr(qualityMonitorDetailsEvaluate.getRatifyTime() == null ? null : qualityMonitorDetailsEvaluate.getRatifyTime().format(dateTimeFormatter)); + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/quality-monitor-evaluate.docx"); + Configure configure = Configure.builder() + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("qualityMonitorDetailsEvaluate", qualityMonitorDetailsEvaluateDto); + put("implementUserUrl", UserUtils.getFinalUserSignatureUrl(Integer.valueOf(qualityMonitorDetailsEvaluate.getImplementUserId()))); + put("ratifyUserUrl", UserUtils.getFinalUserSignatureUrl(qualityMonitorDetailsEvaluate.getRatifyUserId())); + }}); + + 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(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + } + + /************************************************** 鐩戞帶瀹屾垚鎶ュ憡 ****************************************************************/ + + /** + * 涓婁紶鐩戞帶瀹屾垚鎶ュ憡 + * @param file + * @param qualityMonitorDetailsId + * @return + */ + @Override + public boolean uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) { + if (qualityMonitorDetailsId == null) { + throw new ErrorException("缂哄皯鐩戞帶璇︽儏id"); + } + LocalDateTime now = LocalDateTime.now(); + Integer userId =SecurityUtils.getUserId().intValue(); + String contentType = file.getContentType(); + String urlString; + String pathName; + try { + String path = wordUrl; + 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)); + + // 鍒ゆ柇鏄惁鏄痯df + if (!contentType.contains("pdf")) { + wordInsertUrl(new HashMap<String, Object>() {{ + put("writeUrl", UserUtils.getFinalUserSignatureUrl(userId)); + put("writeDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(now)).create()); + }}, wordUrl + "/" + pathName.replace("/word", wordUrl)); + } + + qualityMonitorDetailsService.update(Wrappers.<QualityMonitorDetails>lambdaUpdate() + .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetailsId) + .set(QualityMonitorDetails::getFinishReportUrl, pathName) + .set(QualityMonitorDetails::getWriteTime, now)); + + return true; + } catch (Exception e) { + e.printStackTrace(); + throw new ErrorException("鏂囦欢涓婁紶澶辫触"); + } + } + + /** + * 鎵瑰噯瀹屾垚鎶ュ憡 + * @param qualityMonitorDetails + * @return + */ + @Override + public boolean ratifyFinishReport(QualityMonitorDetails qualityMonitorDetails) { + LocalDateTime now = LocalDateTime.now(); + Integer userId =SecurityUtils.getUserId().intValue(); + LambdaUpdateWrapper<QualityMonitorDetails> wrapper = Wrappers.<QualityMonitorDetails>lambdaUpdate() + .eq(QualityMonitorDetails::getQualityMonitorDetailsId, qualityMonitorDetails.getQualityMonitorDetailsId()) + .set(QualityMonitorDetails::getRatifyUserId, userId) + .set(QualityMonitorDetails::getRatifyRemark, qualityMonitorDetails.getRatifyRemark()) + .set(QualityMonitorDetails::getRatifyStatus, qualityMonitorDetails.getRatifyStatus()) + .set(QualityMonitorDetails::getRatifyTime, now); + if (qualityMonitorDetails.getRatifyStatus().equals(0)) { + wrapper.set(QualityMonitorDetails::getFinishReportUrl, null); + } + qualityMonitorDetailsMapper.update(null, wrapper); + + // 娣诲姞鎵瑰噯浜� + QualityMonitorDetails details = qualityMonitorDetailsMapper.selectById(qualityMonitorDetails.getQualityMonitorDetailsId()); + if (StringUtils.isNotBlank(details.getFinishReportUrl()) && !details.getFinishReportUrl().contains(".pdf")) { + wordInsertUrl(new HashMap<String, Object>() {{ + put("ratifyUrl", UserUtils.getFinalUserSignatureUrl(userId)); + put("ratifyDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(now)).create()); + }}, wordUrl + "/" + details.getFinishReportUrl().replace("/word", wordUrl)); + } + return true; + } + + public int wordInsertUrl(Map<String, Object> map, String url) { + XWPFTemplate template = XWPFTemplate.compile(url).render(map); + try { + template.writeAndClose(Files.newOutputStream(Paths.get(url))); + } catch (IOException e) { + throw new RuntimeException(e); + } + return 1; + } + + +} + -- Gitblit v1.9.3