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/QualitySuperviseServiceImpl.java | 1267 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,267 insertions(+), 0 deletions(-) diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java new file mode 100644 index 0000000..e8c52f0 --- /dev/null +++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java @@ -0,0 +1,1267 @@ +package com.ruoyi.process.service.impl; + +import cn.hutool.core.util.StrUtil; +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.CollectionUtils; +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.PictureRenderData; +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.process.dto.QualitySuperviseDetailsAccordingDto; +import com.ruoyi.process.dto.QualitySuperviseDetailsCorrectDto; +import com.ruoyi.process.dto.QualitySuperviseDetailsDto; +import com.ruoyi.process.excel.QualitySuperviseDetailsUpload; +import com.ruoyi.process.mapper.*; +import com.ruoyi.process.pojo.*; +import com.ruoyi.process.service.QualitySuperviseDetailsService; +import com.ruoyi.process.service.QualitySuperviseService; +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.time.LocalDate; +import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 璐ㄩ噺鐩戠潱涓昏〃 + * + * @author zhuo + * @since 2024-11-07 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class QualitySuperviseServiceImpl extends ServiceImpl<QualitySuperviseMapper, QualitySupervise> 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 InformationNotificationService informationNotificationService; + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Resource + private UserMapper userMapper; + @Value("${file.path}") + private String imgUrl; + + @Value("${wordUrl}") + private String wordUrl; + + /** + * 瀵煎叆鐩戠潱璁″垝 + * @param file + * @return + */ + @Override + public boolean importQualitySupervise(MultipartFile file, QualitySupervise supervise) { + if (supervise.getRatifyUserId() == null) { + throw new ErrorException("缂哄皯鎵瑰噯浜�"); + } + User ratifyUser = userMapper.selectById(supervise.getRatifyUserId()); + + // 褰撳墠鐧诲綍鐢ㄦ埛 + Integer userId = SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + + // 鏂囦欢鍚嶇О + String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")); + QualitySupervise qualitySupervise = new QualitySupervise(); + qualitySupervise.setSuperviseName(fileName); + qualitySupervise.setSuperviseYear(supervise.getSuperviseYear()); + qualitySupervise.setRecordUserIds(supervise.getRecordUserIds()); + qualitySupervise.setWriteUserId(userId); + qualitySupervise.setWriteUserName(user.getName()); + qualitySupervise.setWriteTime(LocalDateTime.now()); + qualitySupervise.setRatifyUserId(supervise.getRatifyUserId()); + qualitySupervise.setRatifyUserName(ratifyUser.getName()); + baseMapper.insert(qualitySupervise); + + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戠潱璁″垝瀹℃牳閫氱煡"); + info.setContent("鎮ㄦ湁涓�鏉¤川閲忕洃鐫h鍒掑緟鎵瑰噯"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(supervise.getRatifyUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_SUPERVISE); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(supervise.getRatifyUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戠潱璁″垝鎵瑰噯閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝"; + message += "\n" + fileName + "璐ㄩ噺鐩戠潱璁″垝寰呮壒鍑�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + + List<QualitySuperviseDetails> detailsUploadList = new ArrayList<>(); + + // 瀵煎叆闄勪欢鍐呭 + try { + // excel瑙f瀽 + EasyExcel.read(file.getInputStream(), QualitySuperviseDetailsUpload.class, new AnalysisEventListener<QualitySuperviseDetailsUpload>() { + @Override + public void invoke(QualitySuperviseDetailsUpload detailsUpload, AnalysisContext analysisContext) { + // 鍒ゆ柇鏄惁涓虹┖ + if (StringUtils.isBlank(detailsUpload.getSuperviseTime())) { + throw new ErrorException("鐩戠潱鏃ユ湡涓嶈兘涓虹┖"); + } + // 瀵硅薄澶嶅埗 + QualitySuperviseDetails superviseDetails = new QualitySuperviseDetails(); + BeanUtils.copyProperties(detailsUpload, superviseDetails); + superviseDetails.setSuperviseId(qualitySupervise.getSuperviseId()); + + User user = userMapper.selectOne(Wrappers.<User>lambdaQuery() + .eq(User::getName, superviseDetails.getSupervisee())); + if (ObjectUtils.isEmpty(user)) { + throw new ErrorException("鏈壘鍒拌鐩戠潱鍛橈細" + superviseDetails.getSupervisee()); + } + superviseDetails.setSupervisedUserId(user.getId()); + // 鏍煎紡鍖栨椂闂� + superviseDetails.setSuperviseTime(detailsUpload.getSuperviseTime()); + + 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) { + // 褰撳墠鐧诲綍鐢ㄦ埛 + baseMapper.update(null, Wrappers.<QualitySupervise>lambdaUpdate() + .eq(QualitySupervise::getSuperviseId, qualitySupervise.getSuperviseId()) + .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<QualitySupervise> pageQualitySupervise(Page page, QualitySupervise qualitySupervise) { + return baseMapper.pageQualitySupervise(page, QueryWrappers.queryWrappers(qualitySupervise)); + } + + /** + * 鐩戠潱璁″垝璇︽儏鍒楄〃 + * @return + */ + @Override + public IPage<QualitySuperviseDetailsDto> pageQualitySuperviseDetail(Page page, QualitySuperviseDetailsDto qualitySuperviseDetails) { + if (qualitySuperviseDetails.getSuperviseId() == null) { + return new Page(); + } + Integer causeType = qualitySuperviseDetails.getCauseType(); + qualitySuperviseDetails.setCauseType(null); + return qualitySuperviseDetailsMapper.pageQualitySuperviseDetail(page, QueryWrappers.queryWrappers(qualitySuperviseDetails), causeType); + } + + /** + * 鏌ヨ璇ヨ鍒掔洃鐫e憳 + * @param superviseDetailsId + * @return + */ + @Override + public List<Map<String, String>> getRecordUser(Integer superviseDetailsId) { + List<Map<String, String>> recordUser = baseMapper.getRecordUser(superviseDetailsId); + return baseMapper.getRecordUser(superviseDetailsId); + } + + /** + * 瀵煎嚭鐩戠潱璁″垝 + * @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("鎵句笉鍒板鏍镐汉鐨勭鍚�"); + } + } + + // 瀹氫箟涓�涓泦鍚堝瓨鏀句汉鍛樼鍚� + ArrayList<PictureRenderData> recordUserDataList = new ArrayList<>(); + // TODO:纭鏈�澶氫細鏈�5涓汉 + String recordUserIds = qualitySupervise.getRecordUserIds(); + if (StringUtils.isNotBlank(recordUserIds)) { + // 瀵逛汉鍛榠d瀛楃涓茶繘琛屽垎鍓叉垚鏁扮粍 + String[] userIds = recordUserIds.split(","); + // 寰幆鑾峰彇浜哄憳绛惧悕 + for (String userIdStr : userIds) { + // 杞崲涓篿nt绫诲瀷 + Integer userId = Integer.valueOf(userIdStr); + // 鑾峰彇浜哄憳绛惧悕瀵硅薄 + PictureRenderData finalUserSignatureUrl = UserUtils.getFinalUserSignatureUrl(userId); + // 灏嗕汉鍛樼鍚嶅璞℃坊鍔犲埌闆嗗悎涓� + recordUserDataList.add(finalUserSignatureUrl); + } + } + + // 鍒ゆ柇闆嗗悎闀垮害锛屽苟琛ull鍒�2涓� + while (recordUserDataList.size() < 2) { + recordUserDataList.add(null); + } + + // 鏌ヨ璇︽儏 + List<QualitySuperviseDetails> qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectList(Wrappers.<QualitySuperviseDetails>lambdaQuery() + .eq(QualitySuperviseDetails::getSuperviseId, superviseId)); + + 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<String, Object>() {{ + put("year", qualitySupervise.getSuperviseYear()); + 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); + put("recordUserUrl1", recordUserDataList.get(0)); + put("recordUserUrl2", recordUserDataList.get(1)); + }}); + + 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(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + + + } + + /************************************************ 璁板綍 ******************************************************/ + + /** + * 鏌ヨ鐩戠潱璁板綍淇℃伅 + * @param superviseDetailsId + * @return + */ + @Override + public QualitySuperviseDetailsRecord getSuperviseDetailRecord(Integer superviseDetailsId) { + QualitySuperviseDetailsRecord detailsRecord; + detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery() + .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId)); + + // 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓� + if (detailsRecord == null) { + // 鏌ヨ璇︽儏淇℃伅 + QualitySuperviseDetails qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId); + // 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓� + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M"); + YearMonth yearMonth = YearMonth.parse(qualitySuperviseDetails.getSuperviseTime(), formatter); + YearMonth previousYearMonth = yearMonth.minusMonths(1); + + LocalDate startDate = previousYearMonth.atDay(1); + LocalDate endDate = previousYearMonth.atEndOfMonth(); + + LocalDateTime startDateTime = startDate.atStartOfDay(); + LocalDateTime endDateTime = endDate.atTime(23, 59, 59); + + DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + // 鑾峰彇寮�濮嬫椂闂村拰缁撴潫鏃堕棿 + String startDateTimeStr = startDateTime.format(outputFormatter); + String endDateTimeStr = endDateTime.format(outputFormatter); + + QualitySuperviseDetailsRecord laseRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery() + .between(QualitySuperviseDetailsRecord::getCreateTime, startDateTimeStr, endDateTimeStr) + .isNotNull(QualitySuperviseDetailsRecord::getSupervisor) + .last("limit 1")); + + String supervisor = null; + + if (laseRecord != null) { + // 鏌ヨ璁″垝鑾峰彇鍙︿竴涓洃鐫e憳 + QualitySupervise qualitySupervise = baseMapper.selectById(qualitySuperviseDetails.getSuperviseId()); + if (StringUtils.isNotBlank(qualitySupervise.getRecordUserIds())) { + List<String> recordUserIds = StrUtil.split(qualitySupervise.getRecordUserIds(), ','); + List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery() + .in(User::getId, recordUserIds)); + if (CollectionUtils.isNotEmpty(users) && users.size() == 2) { + // 鍒ゆ柇鏄惁涓�鏍�, 涓�鏍疯幏鍙栧彟澶栦竴涓� + if (users.get(0).getName().equals(laseRecord.getSupervisor())) { + supervisor = users.get(1).getName(); + } else { + supervisor = users.get(0).getName(); + } + + } + } + } + + detailsRecord = new QualitySuperviseDetailsRecord(); + detailsRecord.setSuperviseDetailsId(superviseDetailsId); + detailsRecord.setTestMember(qualitySuperviseDetails.getSupervisee()); + detailsRecord.setSupervisor(supervisor); + + detailsRecord.setPersonnel(SecurityUtils.getLoginUser().getUser().getNickName() + "鏈夌浉搴旀娴嬪憳鐨勪笂宀楄瘉"); + detailsRecord.setEnvironment("娓╁害锛�()鈩� 婀垮害锛�()%"); + detailsRecord.setInspectionRecord("妫�娴嬩汉鍛�" + SecurityUtils.getLoginUser().getUser().getNickName() + "杩涜妫�娴嬭褰曪紝璁板綍鍐呭鐪熷疄鏈夋晥"); + detailsRecord.setExaminingReport("鐢�" + SecurityUtils.getLoginUser().getUser().getNickName() + "鍑虹ず鐨勬娴嬫姤鍛婄鍚堣鑼冭姹�"); + detailsRecord.setSupervisionEvaluation("妫�娴嬫寜鐓ц姹傝繘琛岋紝鍒ゅ畾涓烘弧鎰�"); + detailsRecord.setHandlingAdvice("/"); + + } + // 娣诲姞鎵瑰噯浜哄悕绉� + if (detailsRecord.getRatifyUserId() != null) { + User user = userMapper.selectById(detailsRecord.getRatifyUserId()); + detailsRecord.setRatifyUserName(user.getName()); + } + return detailsRecord; + } + + /** + * 鏂板鐩戠潱璁板綍淇℃伅 + * @param qualitySuperviseDetailsRecord + * @return + */ + @Override + public boolean addSuperviseDetailRecord(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) { + if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) { + throw new ErrorException("缂哄皯鐩戠潱璇︾粏淇℃伅id"); + } + if (qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId() == null) { + qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord); + } else { + qualitySuperviseDetailsRecordMapper.updateById(qualitySuperviseDetailsRecord); + } + + if (qualitySuperviseDetailsRecord.getRatifyUserId() != null) { + + // 鏌ヨ璇︽儏淇℃伅 + QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(qualitySuperviseDetailsRecord.getSuperviseDetailsId()); + + 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("鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱璁板綍寰呭鎵�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(qualitySuperviseDetailsRecord.getRatifyUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_SUPERVISE); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(qualitySuperviseDetailsRecord.getRatifyUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戠潱璁板綍瀹℃壒閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝"; + message += "\n" + "鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱璁板綍寰呭鎵�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + // 娓呯┖鐘舵�� + qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate() + .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsRecordId, qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId()) + .set(QualitySuperviseDetailsRecord::getIsFinish, null)); + + return true; + } + + /** + * 鐩戠潱璁板綍鎵瑰噯 + * @param qualitySuperviseDetailsRecord + * @return + */ + @Override + public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) { + if (qualitySuperviseDetailsRecord.getIsFinish() == null) { + throw new RuntimeException("缂哄皯璁板綍缁撴灉鐘舵��"); + } + + LambdaUpdateWrapper<QualitySuperviseDetailsRecord> wrapper = Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate() + .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId()) + .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion()) + .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording()) + .set(QualitySuperviseDetailsRecord::getIsFinish, qualitySuperviseDetailsRecord.getIsFinish()); + + // 涓�0娓呴櫎瀹℃牳浜� + if (qualitySuperviseDetailsRecord.getIsFinish().equals(0)) { + wrapper.set(QualitySuperviseDetailsRecord::getRatifyUserId, null) + .set(QualitySuperviseDetailsRecord::getRatifyTime, null); + } else { + wrapper.set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now()); + } + + qualitySuperviseDetailsRecordMapper.update(null, wrapper); + + + return true; + } + + /** + * 瀵煎嚭鐩戠潱璁板綍琛� + * @param superviseDetailsId + * @param response + */ + @Override + public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) { + QualitySuperviseDetailsRecord recordDto = qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId); + + // 鏌ヨ妫�娴嬩汉鍛� + User tserUser = new User(); + if (StringUtils.isNotBlank(recordDto.getTestMember())) { + tserUser = userMapper.selectOne(Wrappers.<User>lambdaQuery() + .eq(User::getName, recordDto.getTestMember()) + .last("limit 1")); + } + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx"); + ConfigureBuilder builder = Configure.builder(); + builder.useSpringEL(true); + User finalTserUser = tserUser; + XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render( + new HashMap<String, Object>() {{ + put("supervision", recordDto); + put("testMemberUrl", UserUtils.getFinalUserSignatureUrl(finalTserUser.getId())); + put("supervisoruUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getSupervisor())); + put("technicalDirectorUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getRatifyUserId())); + 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(); + inputStream.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(SecurityUtils.getUserId().intValue()); + 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());//璁板綍浜篿d + according.setRecordUserName(user.getName());//璁板綍浜� + according.setRecordTime(LocalDate.now());//璁板綍鏃堕棿 + + // 澶勭悊浜轰俊鎭� + User actionsUser = userMapper.selectById(detailsAccording.getActionsUserId()); + String actionsDepartmentLims = userMapper.selectUserDepartmentLimsName(actionsUser.getId()); + + according.setResponsibleDepartment(actionsDepartmentLims);//璐d换閮ㄩ棬 + according.setActionsUserId(actionsUser.getId());//澶勭悊浜篿d + according.setActionsUserName(actionsUser.getName());//澶勭悊浜� + + according.setSupervisedUserId(detailsAccording.getSupervisedUserId());//琚洃鐫d汉id + // 琚洃鐫d汉 + User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId()); + according.setSupervisedUserName(supervisedUser.getName());//琚洃鐫d汉 + according.setActionsTime(detailsAccording.getSupervisedTime());//琚洃鐫f椂闂� + 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());//绾犳璐熻矗浜篿d + 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());//璐ㄩ噺璐熻矗浜篿d + 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 detailsAccording + * @return + */ + @Override + public boolean addEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) { + if (detailsAccording.getSuperviseDetailsId() == null) { + throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id"); + } + + // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂� + Integer userId = SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); + detailsAccording.setFoundDepartment(departmentLimsName);//鍙戠幇閮ㄩ棬 + detailsAccording.setRecordUserId(user.getId());//璁板綍浜篿d + detailsAccording.setRecordUserName(user.getName());//璁板綍浜� + // 琚洃鐫d汉 + User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId()); + detailsAccording.setSupervisedUserName(supervisedUser.getName());//琚洃鐫� + + if (detailsAccording.getSuperviseDetailsAccordingId() == null) { + qualitySuperviseDetailsAccordingMapper.insert(detailsAccording); + } else { + qualitySuperviseDetailsAccordingMapper.updateById(detailsAccording); + } + + if (detailsAccording.getApproverUserId() != null) { + // 鏌ヨ璇︽儏淇℃伅 + QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(detailsAccording.getSuperviseDetailsId()); + + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戠潱涓嶅悎鏍兼帶鍒跺崟濉啓閫氱煡"); + info.setContent("鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱涓嶅悎鏍兼帶鍒跺崟寰呭~鍐�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(detailsAccording.getApproverUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_SUPERVISE); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(detailsAccording.getApproverUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戠潱璁板綍瀹℃壒閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝"; + message += "\n" + "鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱涓嶅悎鏍兼帶鍒跺崟寰呭~鍐�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + // 娓呯┖鐘舵�� + qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate() + .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId()) + .set(QualitySuperviseDetailsAccording::getIsFinish, null)); + + return true; + } + + /** + * (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭� + * 鎵瑰噯瀹屾垚鍚庣粺涓�濉啓涓変釜娴佺▼浜篿d鍜岄儴闂� + * @param detailsAccording + * @return + */ + @Override + public boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) { + if (detailsAccording.getIsFinish() == null) { + throw new RuntimeException("缂哄皯鎵瑰噯鐘舵��"); + } + + QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording(); + according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId()); + + if (detailsAccording.getIsFinish().equals(1)) { + // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂� + User user = userMapper.selectById(SecurityUtils.getUserId().intValue()); + String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); + + according.setResponsibleDepartment(departmentLimsName);//璐d换閮ㄩ棬 + according.setActionsUserId(user.getId());//澶勭悊浜篿d + according.setActionsUserName(user.getName());//澶勭悊浜� + + according.setCorrectUserId(user.getId());//绾犳璐熻矗浜篿d + according.setCorrectUserName(user.getName());//绾犳璐熻矗浜� + + according.setQualityManagerUserId(user.getId());//璐ㄩ噺璐熻矗浜篿d + according.setQualityManagerUserName(user.getName());//璐ㄩ噺璐熻矗浜� + } else { + qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate() + .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId()) + .set(QualitySuperviseDetailsAccording::getResponsibleDepartment, null) + .set(QualitySuperviseDetailsAccording::getActionsUserId, null) + .set(QualitySuperviseDetailsAccording::getActionsUserName, null) + .set(QualitySuperviseDetailsAccording::getCorrectUserId, null) + .set(QualitySuperviseDetailsAccording::getCorrectUserName, null) + .set(QualitySuperviseDetailsAccording::getQualityManagerUserId, null) + .set(QualitySuperviseDetailsAccording::getQualityManagerUserName, null) + .set(QualitySuperviseDetailsAccording::getApproverUserId, null)); + } + + according.setIsFinish(detailsAccording.getIsFinish()); + qualitySuperviseDetailsAccordingMapper.updateById(according); + return true; + } + + /** + * 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭� + * @param superviseDetailsId + * @return + */ + @Override + public QualitySuperviseDetailsAccording getSuperviseDetailAccording(Integer superviseDetailsId) { + QualitySuperviseDetailsAccording detailsAccording; + + detailsAccording = qualitySuperviseDetailsAccordingMapper.selectOne(Wrappers.<QualitySuperviseDetailsAccording>lambdaQuery() + .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsId, superviseDetailsId)); + + if (detailsAccording == null) { + detailsAccording = new QualitySuperviseDetailsAccording(); + // 鏌ヨ鐩戠潱璁″垝璇︽儏 + QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId); + superviseDetails.setSuperviseDetailsId(superviseDetailsId); + detailsAccording.setSupervisedUserId(superviseDetails.getSupervisedUserId()); + detailsAccording.setSupervisedUserName(superviseDetails.getSupervisee()); + } + return detailsAccording; + } + + /** + * 鏌ヨ涓嶇鍚堥」 + * @param page + * @param detailsAccording + * @return + */ + @Override + public IPage<QualitySuperviseDetailsAccording> 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("鎵句笉鍒板鐞嗘帾鏂借礋璐d汉鐨勭鍚�"); + } + } + + // 鎶�鏈礋璐d汉 + String correctiveUrl = null; + if (exportDto.getQualityManagerUserId() != null) { + correctiveUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl(); + if (StringUtils.isBlank(correctiveUrl)) { + throw new ErrorException("鎵句笉鍒版妧鏈礋璐d汉鐨勭鍚�"); + } + } + + // 璐ㄩ噺璐熻矗浜� + String qualityUrl = null; + if (exportDto.getQualityManagerUserId() != null) { + qualityUrl = userMapper.selectById(exportDto.getQualityManagerUserId()).getSignatureUrl(); + if (StringUtils.isBlank(qualityUrl)) { + throw new ErrorException("鎵句笉鍒拌川閲忚礋璐d汉鐨勭鍚�"); + } + } + + // 鑾峰彇璺緞 + 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<String, Object>() {{ + 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(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + } + + /************************************************* 绾犳鎺柦澶勭悊鍗� ********************************************************/ + + + @Override + public boolean addSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) { + QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect(); + // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂� + User user = userMapper.selectById(SecurityUtils.getUserId().intValue()); + 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());//鎻愬嚭浜篿d + correct.setRaiseUserName(user.getName());// 鎻愬嚭浜� + correct.setRaiseTime(LocalDate.now());// 鎻愬嚭鏃堕棿 + + // 鍘熷洜鍒嗘瀽浜轰俊鎭� + User causeUser = userMapper.selectById(detailsCorrect.getCauseUserId()); + String causeDepartmentLims = userMapper.selectUserDepartmentLimsName(causeUser.getId()); + + correct.setCauseDepartment(causeDepartmentLims);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬 + correct.setCauseUserId(causeUser.getId());//1鍘熷洜鍒嗘瀽浜篿d + 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绾犳璐d换閮ㄩ棬 + correct.setCorrectUserId(correctUser.getId());//2绾犳浜篿d + 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楠岃瘉浜篿d + 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; + } + + /** + * (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊淇℃伅 + * @return + */ + @Override + public boolean addEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) { + if (detailsCorrect.getSuperviseDetailsId() == null) { + throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id"); + } + // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂� + Integer userId = SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId); + String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); + + detailsCorrect.setRaiseDepartment(departmentLimsName);//鎻愬嚭閮ㄩ棬 + detailsCorrect.setRaiseUserId(user.getId());//鎻愬嚭浜篿d + detailsCorrect.setRaiseUserName(user.getName());// 鎻愬嚭浜� + if (detailsCorrect.getSuperviseDetailsCorrectId() == null) { + qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect); + } else { + qualitySuperviseDetailsCorrectMapper.updateById(detailsCorrect); + } + + if (detailsCorrect.getApproverUserId() != null) { + // 鏌ヨ璇︽儏淇℃伅 + QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(detailsCorrect.getSuperviseDetailsId()); + + // 娑堟伅鍙戦�� + InformationNotification info = new InformationNotification(); + // 鍙戦�佷汉 + info.setCreateUser(user.getName()); + info.setMessageType("6"); + info.setTheme("CNAS璐ㄩ噺鐩戠潱绾犳鎺柦濉啓閫氱煡"); + info.setContent("鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱绾犳鎺柦寰呭~鍐�"); + info.setSenderId(userId); + // 鎺ユ敹浜� + info.setConsigneeId(detailsCorrect.getApproverUserId()); + info.setJumpPath(MenuJumpPathConstants.QUALITY_SUPERVISE); + informationNotificationService.addInformationNotification(info); + + // 鍙戦�佷紒涓氬井淇¢�氱煡 + threadPoolTaskExecutor.execute(() -> { + // 鏌ヨ鍙戦�佷汉 + User people = userMapper.selectById(detailsCorrect.getApproverUserId()); + String message = ""; + message += "CNAS璐ㄩ噺鐩戠潱绾犳鎺柦濉啓閫氱煡"; + message += "\n璇峰幓杩囩▼瑕佹眰-璐ㄩ噺鐩戠潱璁″垝"; + message += "\n" + "鐩戠潱椤圭洰涓�: " + superviseDetails.getSuperviseProject() + " 鐩戠潱绾犳鎺柦寰呭~鍐�"; + //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 + try { + WxCpUtils.inform(people.getAccount(), message, null); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + // 娓呯┖鐘舵�� + qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate() + .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId()) + .set(QualitySuperviseDetailsCorrect::getIsFinish, null)); + return true; + } + + /** + * (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊淇℃伅 + * @return + */ + @Override + public boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) { + if (detailsCorrect.getIsFinish() == null) { + throw new RuntimeException("缂哄皯鎵瑰噯鐘舵��"); + } + + QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect(); + // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂� + User user = userMapper.selectById(SecurityUtils.getUserId().intValue()); + String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId()); + correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId()); + + if (detailsCorrect.getIsFinish().equals(1)) { + correct.setCauseDepartment(departmentLimsName);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬 + correct.setCauseUserId(user.getId());//1鍘熷洜鍒嗘瀽浜篿d + correct.setCauseUserName(user.getName());// 1鍘熷洜鍒嗘瀽浜� + + correct.setCorrectDepartment(departmentLimsName);//2绾犳璐d换閮ㄩ棬 + correct.setCorrectUserId(user.getId());//2绾犳浜篿d + correct.setCorrectUserName(user.getName());// 2绾犳浜� + + correct.setValidationDepartment(departmentLimsName);//3楠岃瘉閮ㄩ棬 + correct.setValidationUserId(user.getId());//3楠岃瘉浜篿d + correct.setValidationUserName(user.getName());// 3楠岃瘉浜� + } else { + qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate() + .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId()) + .set(QualitySuperviseDetailsCorrect::getCauseDepartment, null) + .set(QualitySuperviseDetailsCorrect::getCauseUserId, null) + .set(QualitySuperviseDetailsCorrect::getCauseUserName, null) + .set(QualitySuperviseDetailsCorrect::getCorrectDepartment, null) + .set(QualitySuperviseDetailsCorrect::getCorrectUserId, null) + .set(QualitySuperviseDetailsCorrect::getCorrectUserName, null) + .set(QualitySuperviseDetailsCorrect::getValidationDepartment, null) + .set(QualitySuperviseDetailsCorrect::getValidationUserId, null) + .set(QualitySuperviseDetailsCorrect::getValidationUserName, null) + .set(QualitySuperviseDetailsCorrect::getApproverUserId, null) + ); + } + + correct.setIsFinish(detailsCorrect.getIsFinish()); + qualitySuperviseDetailsCorrectMapper.updateById(correct); + + return true; + } + + /** + * 鏌ヨ鐩戠潱绾犳澶勭悊 + * @param superviseDetailsId + * @return + */ + @Override + public QualitySuperviseDetailsCorrect getSuperviseDetailCorrect(Integer superviseDetailsId) { + QualitySuperviseDetailsCorrect detailsCorrect; + + detailsCorrect = qualitySuperviseDetailsCorrectMapper.selectOne(Wrappers.<QualitySuperviseDetailsCorrect>lambdaQuery() + .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsId, superviseDetailsId)); + + if (detailsCorrect == null) { + detailsCorrect = new QualitySuperviseDetailsCorrect(); + detailsCorrect.setSuperviseDetailsId(superviseDetailsId); + } + return detailsCorrect; + } + + /** + * 鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃 + * @param page + * @param detailsCorrect + * @return + */ + @Override + public IPage<QualitySuperviseDetailsCorrect> 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<QualitySuperviseDetailsCorrectFile> getSuperviseDetailCorrectFileList(Integer superviseDetailsCorrectId) { + return qualitySuperviseDetailsCorrectFileMapper.selectList(Wrappers.<QualitySuperviseDetailsCorrectFile>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("鎵句笉鍒扮籂姝d汉鐨勭鍚�"); + } + } + + // 楠岃瘉浜� + 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<String, Object>() {{ + 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(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + + } +} + -- Gitblit v1.9.3